diff --git a/.azure-pipelines/azure-pipeline-ci.yml b/.azure-pipelines/azure-pipeline-ci.yml index de7e7666..43a93a41 100644 --- a/.azure-pipelines/azure-pipeline-ci.yml +++ b/.azure-pipelines/azure-pipeline-ci.yml @@ -4,13 +4,13 @@ variables: - name: minor value: '1' - name: extensionName - value: 'Terraform' + value: 'OpenTofu' - name: marketplaceServiceConnection - value: 'marketplaceServiceConnection' + value: 'Azure Marketplace cotality' - name: publisherId - value: 'ms-devlabs' + value: 'cotality' - name: publicExtensionName - value: "Terraform" + value: "OpenTofu" name: $(major).$(minor)$(rev:.r) @@ -43,10 +43,10 @@ stages: steps: - task: NodeTool@0 inputs: - versionSpec: '16.x' + versionSpec: '20.x' - template: build.yml@pipeline-templates - template: package.yml@pipeline-templates parameters: extensionName: $(extensionName) outputPath: 'out' - rootPath: './build' + rootPath: './build' \ No newline at end of file diff --git a/.azure-pipelines/azure-pipeline.yml b/.azure-pipelines/azure-pipeline.yml index 8b6da824..846d2d33 100644 --- a/.azure-pipelines/azure-pipeline.yml +++ b/.azure-pipelines/azure-pipeline.yml @@ -4,15 +4,15 @@ variables: - name: minor value: '1' - name: extensionName - value: 'Terraform' + value: 'OpenTofu' - name: marketplaceServiceConnection - value: 'marketplaceServiceConnection' + value: 'Azure Marketplace cotality' - name: publisherId - value: 'ms-devlabs' + value: 'cotality' - name: publicExtensionName - value: "Terraform" + value: "OpenTofu" - name: extensionId - value: "custom-terraform-tasks" + value: "custom-opentofu-tasks" name: $(major).$(minor)$(rev:.r) @@ -40,7 +40,7 @@ stages: steps: - task: NodeTool@0 inputs: - versionSpec: '16.x' + versionSpec: '20.x' - template: build.yml@pipeline-templates - template: package.yml@pipeline-templates parameters: @@ -48,34 +48,34 @@ stages: outputPath: 'out' rootPath: './build' -- stage: 'DeployDev' - displayName: 'Deploy to dev' - dependsOn: Build - condition: succeeded() - jobs: - - template: deploy.yml@pipeline-templates - parameters: - environment: 'dev' - extensionName: $(extensionName) - marketplaceConnectedServiceName: $(marketplaceServiceConnection) - publisherId: $(publisherId) - publicExtensionName: $(publicExtensionName) - updateTaskVersion: true +# - stage: 'DeployDev' +# displayName: 'Deploy to dev' +# dependsOn: Build +# condition: succeeded() +# jobs: +# - template: deploy.yml@pipeline-templates +# parameters: +# environment: 'dev' +# extensionName: $(extensionName) +# marketplaceConnectedServiceName: $(marketplaceServiceConnection) +# publisherId: $(publisherId) +# publicExtensionName: $(publicExtensionName) +# updateTaskVersion: true -- stage: 'DeployTest' - displayName: 'Deploy to Test' - dependsOn: DeployDev - condition: succeeded() - jobs: - - template: deploy.yml@pipeline-templates - parameters: - environment: 'test' - extensionName: $(extensionName) - marketplaceConnectedServiceName: $(marketplaceServiceConnection) - publisherId: $(publisherId) - publicExtensionName: $(publicExtensionName) - updateTaskVersion: true - extensionId: $(extensionId) +# - stage: 'DeployTest' +# displayName: 'Deploy to Test' +# dependsOn: DeployDev +# condition: succeeded() +# jobs: +# - template: deploy.yml@pipeline-templates +# parameters: +# environment: 'test' +# extensionName: $(extensionName) +# marketplaceConnectedServiceName: $(marketplaceServiceConnection) +# publisherId: $(publisherId) +# publicExtensionName: $(publicExtensionName) +# updateTaskVersion: true +# extensionId: $(extensionId) - stage: 'DeployRelease' displayName: 'Deploy Release' @@ -89,6 +89,6 @@ stages: marketplaceConnectedServiceName: $(marketplaceServiceConnection) publisherId: $(publisherId) publicExtensionName: $(publicExtensionName) - extensionVisibility: 'public' + extensionVisibility: 'private' updateTaskVersion: true - extensionId: $(extensionId) + extensionId: $(extensionId) \ No newline at end of file diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index f2ed3382..bbafbc50 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -1,5 +1,5 @@ --- -name: Unit Testing for TerraformTaskV4 +name: Unit Testing for OpenTofuTaskV1 on: pull_request: branches: @@ -10,7 +10,7 @@ on: workflow_dispatch: jobs: - unit-test-v4: + unit-test-v1: name: Unit Test V4 Task runs-on: ubuntu-latest steps: @@ -18,17 +18,6 @@ jobs: uses: actions/checkout@v2 - name: Run Unit Tests run: | - cd Tasks/TerraformTask/TerraformTaskV4 - npm install -include=dev - npm test - unit-test-v5: - name: Unit Test V5 Task - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Run Unit Tests - run: | - cd Tasks/TerraformTask/TerraformTaskV5 + cd Tasks/OpenTofuTask/OpenTofuTaskV1 npm install -include=dev npm test diff --git a/.vscode/launch.json b/.vscode/launch.json index 4b972267..68dcac9c 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,7 +11,7 @@ "skipFiles": [ "/**" ], - "program": "${workspaceFolder}\\Tasks\\TerraformTask\\TerraformTaskV5\\Tests\\L0.ts", + "program": "${workspaceFolder}\\Tasks\\OpenTofuTask\\OpenTofuTaskV5\\Tests\\L0.ts", "outFiles": [ "${workspaceFolder}/**/*.js" ] @@ -24,7 +24,7 @@ "program": "node_modules/mocha/bin/_mocha", "stopOnEntry": false, "args": [ "-r", "ts-node/register", "Tests/**/*.ts", "--no-timeouts"], - "cwd": "${workspaceRoot}/Tasks/TerraformTask/TerraformTaskV5" + "cwd": "${workspaceRoot}/Tasks/OpenTofuTask/OpenTofuTaskV5" }, { "name": "mocha tests npm", @@ -32,7 +32,7 @@ "request": "launch", "runtimeExecutable": "npm", "runtimeArgs": [ "run-script", "test" ], - "cwd": "${workspaceRoot}/Tasks/TerraformTask/TerraformTaskV5" + "cwd": "${workspaceRoot}/Tasks/OpenTofuTask/OpenTofuTaskV5" } ] } \ No newline at end of file diff --git a/README.md b/README.md index 08c04a35..49e0e373 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,22 @@ -# Terraform Extension for Azure DevOps +Azure DevOps OpenTofu Task -## Overview: +Overview -This repo contains the Azure DevOps Pipeline tasks for installing Terraform and running Terraform commands in a build or release pipeline. The goal of this extension is to guide the user in the process of using Terraform to deploy infrastructure within Azure, Amazon Web Services(AWS) and Google Cloud Platform(GCP). +This extension enables you to run OpenTofu commands as part of your Azure Pipelines build and release workflows. This extension is designed as a direct replacement for the Azure DevOps Terraform extension, offering the same functionality but with OpenTofu instead of Terraform. -This extension contains the following contributions: -- Terraform tool installer - for installing Terraform if not installed on the build agent -- Terraform - for executing the core Terraform commands -- Amazon Web Services(AWS) service connection - for creating a service connection for AWS to provide AWS credentials -- Google Cloud Platform(GCP) service connection - for creating a service connection for GCP to provide GCP credentials +OpenTofu is an open-source infrastructure as code tool that is a direct fork of Terraform. It allows you to define and provision infrastructure using a declarative configuration language. -The tasks are capable of running on the following build agent operating systems: -- Windows -- MacOS -- Linux +Changes from the Terraform Extension +This project is a fork of the Azure DevOps Terraform Tasks that has been modified to work with OpenTofu instead. Key changes include: -For more detailed information about the tasks, see the README for each from the below links: +Replacing all command executions from terraform to tofu +Renaming handler classes from TerraformCommand* to OpenTofuCommand* +Updating variable names accordingly (e.g., terraformCommandHandler → openTofuCommandHandler) +Modifying import paths to reference the new OpenTofu command handler files +Updating all tests to use the OpenTofu binary and classes +All functionality remains identical to the original extension, including: -- [Terraform tool installer](https://aka.ms/AAf1a0p) -- [Terraform](https://github.com/microsoft/azure-pipelines-terraform/tree/main/Tasks/TerraformTask/TerraformTaskV4) - - -## Contact Information - -This extension is authored by [Microsoft DevLabs](https://marketplace.visualstudio.com/publishers/Microsoft%20DevLabs). It is not supported by Microsoft. - -To report a problem with this extension, create an issue in this repository. The maintainers of this repository will review and respond to the issue. - -You can also report problems or share feedback about this extension on [Developer Community Forum](https://developercommunity.visualstudio.com/spaces/21/index.html). +Support for AWS, Azure, and GCP providers +All Terraform commands (apply, destroy, init, validate, etc.) +Authentication with cloud providers +Command options and parameters \ No newline at end of file diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/README.md b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/README.md similarity index 100% rename from Tasks/TerraformInstaller/TerraformInstallerV1/README.md rename to Tasks/OpenTofuInstaller/OpenTofuInstallerV1/README.md diff --git a/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/Strings/resources.resjson/en-US/resources.resjson b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 00000000..1fba66fb --- /dev/null +++ b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,16 @@ +{ + "loc.friendlyName": "OpenTofu tool installer", + "loc.helpMarkDown": "[Learn more about this task](https://opentofu.org/docs/)", + "loc.description": "Find in cache or download a specific version of OpenTofu and prepend it to the PATH", + "loc.instanceNameFormat": "Install OpenTofu $(opentofuVersion)", + "loc.input.label.opentofuVersion": "Version", + "loc.input.help.opentofuVersion": "The version of OpenTofu which should be installed on the agent if not already present", + "loc.messages.VerifyOpenTofuInstallation": "Verifying OpenTofu installation...", + "loc.messages.InputVersionNotValidSemanticVersion": "Input version %s is not a valid semantic version", + "loc.messages.OpenTofuNotFoundInFolder": "OpenTofu executable not found in path %s", + "loc.messages.OperatingSystemNotSupported": "Operating system %s is not supported", + "loc.messages.ArchitectureNotSupported": "Architecture %s is not supported", + "loc.messages.OpenTofuDownloadFailed": "Failed to download OpenTofu from url %s. Error %s", + "loc.messages.OpenTofuVersionNotFound": "Unable to get latest version: using 1.9.0", + "loc.messages.GettingLatestOpenTofuVersion": "Getting latest OpenTofu version." +} \ No newline at end of file diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/ThirdPartyNotices.txt b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/ThirdPartyNotices.txt similarity index 100% rename from Tasks/TerraformInstaller/TerraformInstallerV0/ThirdPartyNotices.txt rename to Tasks/OpenTofuInstaller/OpenTofuInstallerV1/ThirdPartyNotices.txt diff --git a/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/icon.png b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/icon.png new file mode 100644 index 00000000..6f9fdca7 Binary files /dev/null and b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/icon.png differ diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/icon.svg b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/icon.svg similarity index 100% rename from Tasks/TerraformInstaller/TerraformInstallerV0/icon.svg rename to Tasks/OpenTofuInstaller/OpenTofuInstallerV1/icon.svg diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/make.json b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/make.json similarity index 100% rename from Tasks/TerraformInstaller/TerraformInstallerV0/make.json rename to Tasks/OpenTofuInstaller/OpenTofuInstallerV1/make.json diff --git a/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/package-lock.json b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/package-lock.json new file mode 100644 index 00000000..18daae49 --- /dev/null +++ b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/package-lock.json @@ -0,0 +1,807 @@ +{ + "name": "opentofutask", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "opentofutask", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "azure-pipelines-task-lib": "^4.1.0", + "azure-pipelines-tool-lib": "^2.0.0-preview", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.7" + }, + "devDependencies": { + "@types/mocha": "^9.1.0", + "@types/node": "^16.11.39", + "@types/q": "^1.5.0", + "typescript": "^4.0.0" + } + }, + "node_modules/@types/mocha": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "16.18.126", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", + "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.13.tgz", + "integrity": "sha512-pAeZeUbLE4Z9Vi9wsWV2bYPTweEHeJJy0G4pEjOA/FSvy1Ad5U5Km8iDV6TKre1mjBiVNfAdVHKruP8bAh4Q5A==", + "license": "MIT" + }, + "node_modules/adm-zip": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/azure-pipelines-task-lib": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", + "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", + "license": "MIT", + "dependencies": { + "adm-zip": "^0.5.10", + "minimatch": "3.0.5", + "nodejs-file-downloader": "^4.11.1", + "q": "^1.5.1", + "semver": "^5.7.2", + "shelljs": "^0.8.5", + "uuid": "^3.0.1" + } + }, + "node_modules/azure-pipelines-tool-lib": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.8.tgz", + "integrity": "sha512-yCFxJfZeNPUDCi7dbmiqVvq5lFpZdqB9kzr/wB9sZuE0RvUEhBF51gtzdR9cI5+NOsfkAVWwQJVWvdGQR5I3Wg==", + "license": "MIT", + "dependencies": { + "@types/semver": "^5.3.0", + "@types/uuid": "^3.4.5", + "azure-pipelines-task-lib": "^4.1.0", + "semver": "^5.7.0", + "semver-compare": "^1.0.0", + "typed-rest-client": "^1.8.6", + "uuid": "^3.3.2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodejs-file-downloader": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", + "integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==", + "license": "ISC", + "dependencies": { + "follow-redirects": "^1.15.6", + "https-proxy-agent": "^5.0.0", + "mime-types": "^2.1.27", + "sanitize-filename": "^1.6.3" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT" + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "license": "MIT", + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "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.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + } + } +} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/package.json b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/package.json similarity index 81% rename from Tasks/TerraformInstaller/TerraformInstallerV1/package.json rename to Tasks/OpenTofuInstaller/OpenTofuInstallerV1/package.json index 78071e63..7fbce416 100644 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/package.json +++ b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/package.json @@ -1,12 +1,12 @@ { - "name": "terraformtask", + "name": "opentofutask", "version": "1.0.0", - "description": "", + "description": "Azure DevOps task for installing OpenTofu", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "author": "", + "author": "Cotality", "license": "ISC", "minimumAgentVersion": "2.144.0", "dependencies": { @@ -21,4 +21,4 @@ "@types/q": "^1.5.0", "typescript": "^4.0.0" } -} +} \ No newline at end of file diff --git a/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/src/index.ts b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/src/index.ts new file mode 100644 index 00000000..ed0863df --- /dev/null +++ b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/src/index.ts @@ -0,0 +1,38 @@ +import tasks = require('azure-pipelines-task-lib/task'); +import tools = require('azure-pipelines-tool-lib/tool'); +import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; +import path = require('path'); +import * as installer from './terraform-installer'; + +async function configureOpenTofu() { + let inputVersion = tasks.getInput("opentofuVersion", true); + let opentofuPath = await installer.downloadOpenTofu(inputVersion); + let envPath = process.env['PATH']; + + // Prepend the tools path. Instructs the agent to prepend for future tasks + if (envPath && !envPath.startsWith(path.dirname(opentofuPath))) { + tools.prependPath(path.dirname(opentofuPath)); + } +} + +async function verifyOpenTofu() { + console.log(tasks.loc("VerifyOpenTofuInstallation")); + let opentofuPath = tasks.which("tofu", true); + let opentofuTool : ToolRunner = tasks.tool(opentofuPath); + opentofuTool.arg("version"); + return opentofuTool.exec(); +} + +async function run() { + tasks.setResourcePath(path.join(__dirname, '..', 'task.json')); + + try { + await configureOpenTofu(); + await verifyOpenTofu(); + tasks.setResult(tasks.TaskResult.Succeeded, ""); + } catch (error) { + tasks.setResult(tasks.TaskResult.Failed, error); + } +} + +run(); \ No newline at end of file diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/src/terraform-installer.ts b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/src/terraform-installer.ts similarity index 54% rename from Tasks/TerraformInstaller/TerraformInstallerV0/src/terraform-installer.ts rename to Tasks/OpenTofuInstaller/OpenTofuInstallerV1/src/terraform-installer.ts index ddbcf78c..a27530e7 100644 --- a/Tasks/TerraformInstaller/TerraformInstallerV0/src/terraform-installer.ts +++ b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/src/terraform-installer.ts @@ -1,141 +1,139 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import tools = require('azure-pipelines-tool-lib/tool'); -import path = require('path'); -import os = require('os'); -import fs = require('fs'); - -const uuidV4 = require('uuid/v4'); -const fetch = require('node-fetch'); -const HttpsProxyAgent = require('https-proxy-agent'); - -const terraformToolName = "terraform"; -const isWindows = os.type().match(/^Win/); -const proxy = tasks.getHttpProxyConfiguration(); -export async function downloadTerraform(inputVersion: string): Promise { - var latestVersion: string = ""; - if(inputVersion.toLowerCase() === 'latest') { - console.log(tasks.loc("GettingLatestTerraformVersion")); - if(proxy == null){ - await fetch('https://checkpoint-api.hashicorp.com/v1/check/terraform') - .then((response: { json: () => any; }) => response.json()) - .then((data: { [x: string]: any; }) => { - latestVersion = data.current_version; - }) - .catch((exception: any) => { - console.warn(tasks.loc("TerraformVersionNotFound")); - - latestVersion = '1.9.8'; - }) - } - else - { - - var proxyUrl = proxy.proxyUsername !="" ? proxy.proxyUrl.split("://")[0] + '://' + proxy.proxyUsername + ':' + proxy.proxyPassword + '@' + proxy.proxyUrl.split("://")[1]:proxy.proxyUrl; - var proxyAgent = new HttpsProxyAgent(proxyUrl); - await fetch('https://checkpoint-api.hashicorp.com/v1/check/terraform', { agent: proxyAgent}) - .then((response: { json: () => any; }) => response.json()) - .then((data: { [x: string]: any; }) => { - latestVersion = data.current_version; - }) - .catch((exception: any) => { - console.warn(tasks.loc("TerraformVersionNotFound")); - latestVersion = '1.9.8'; - }) - } - } - var version = latestVersion != "" ? tools.cleanVersion(latestVersion) : tools.cleanVersion(inputVersion); - - if (!version) { - throw new Error(tasks.loc("InputVersionNotValidSemanticVersion", inputVersion)); - } - - let cachedToolPath = tools.findLocalTool(terraformToolName, version); - if (!cachedToolPath) { - let terraformDownloadUrl = getTerraformDownloadUrl(version); - let fileName = `${terraformToolName}-${version}-${uuidV4()}.zip`; - let terraformDownloadPath; - - try { - terraformDownloadPath = await tools.downloadTool(terraformDownloadUrl, fileName); - } catch (exception) { - throw new Error(tasks.loc("TerraformDownloadFailed", terraformDownloadUrl, exception)); - } - - let terraformUnzippedPath = await tools.extractZip(terraformDownloadPath); - cachedToolPath = await tools.cacheDir(terraformUnzippedPath, terraformToolName, version); - } - - let terraformPath = findTerraformExecutable(cachedToolPath); - if (!terraformPath) { - throw new Error(tasks.loc("TerraformNotFoundInFolder", cachedToolPath)); - } - - if (!isWindows) { - fs.chmodSync(terraformPath, "777"); - } - - tasks.setVariable('terraformLocation', terraformPath); - - return terraformPath; -} - -function getTerraformDownloadUrl(version: string): string { - let platform: string; - let architecture: string; - - switch(os.type()) { - case "Darwin": - platform = "darwin"; - break; - - case "Linux": - platform = "linux"; - break; - - case "Windows_NT": - platform = "windows"; - break; - - default: - throw new Error(tasks.loc("OperatingSystemNotSupported", os.type())); - } - - switch(os.arch()) { - case "x64": - architecture = "amd64"; - break; - - case "x32": - architecture = "386"; - break; - - case "arm64": - architecture = "arm64"; - break; - - case "arm": - architecture = "arm"; - break; - - default: - throw new Error(tasks.loc("ArchitectureNotSupported", os.arch())); - } - - return `https://releases.hashicorp.com/terraform/${version}/terraform_${version}_${platform}_${architecture}.zip`; -} - -function findTerraformExecutable(rootFolder: string): string { - let terraformPath = path.join(rootFolder, terraformToolName + getExecutableExtension()); - var allPaths = tasks.find(rootFolder); - var matchingResultFiles = tasks.match(allPaths, terraformPath, rootFolder); - return matchingResultFiles[0]; -} - -function getExecutableExtension(): string { - if (isWindows) { - return ".exe"; - } - - return ""; - -} +import tasks = require('azure-pipelines-task-lib/task'); +import tools = require('azure-pipelines-tool-lib/tool'); +import path = require('path'); +import os = require('os'); +import fs = require('fs'); + +const uuidV4 = require('uuid/v4'); +const fetch = require('node-fetch'); +const HttpsProxyAgent = require('https-proxy-agent'); + +const opentofuToolName = "tofu"; +const isWindows = os.type().match(/^Win/); +const proxy = tasks.getHttpProxyConfiguration(); + +export async function downloadOpenTofu(inputVersion: string): Promise { + var latestVersion: string = ""; + if(inputVersion.toLowerCase() === 'latest') { + console.log(tasks.loc("GettingLatestOpenTofuVersion")); + if(proxy == null){ + await fetch('https://api.github.com/repos/opentofu/opentofu/releases/latest') + .then((response: { json: () => any; }) => response.json()) + .then((data: { [x: string]: any; }) => { + latestVersion = data.tag_name.replace('v', ''); // Remove 'v' prefix from version + }) + .catch((exception: any) => { + console.warn(tasks.loc("OpenTofuVersionNotFound")); + latestVersion = '1.9.0'; + }) + } + else + { + var proxyUrl = proxy.proxyUsername !="" ? proxy.proxyUrl.split("://")[0] + '://' + proxy.proxyUsername + ':' + proxy.proxyPassword + '@' + proxy.proxyUrl.split("://")[1]:proxy.proxyUrl; + var proxyAgent = new HttpsProxyAgent(proxyUrl); + await fetch('https://api.github.com/repos/opentofu/opentofu/releases/latest', { agent: proxyAgent}) + .then((response: { json: () => any; }) => response.json()) + .then((data: { [x: string]: any; }) => { + latestVersion = data.tag_name.replace('v', ''); // Remove 'v' prefix from version + }) + .catch((exception: any) => { + console.warn(tasks.loc("OpenTofuVersionNotFound")); + latestVersion = '1.9.0'; + }) + } + } + var version = latestVersion != "" ? tools.cleanVersion(latestVersion) : tools.cleanVersion(inputVersion); + + if (!version) { + throw new Error(tasks.loc("InputVersionNotValidSemanticVersion", inputVersion)); + } + + let cachedToolPath = tools.findLocalTool(opentofuToolName, version); + if (!cachedToolPath) { + let opentofuDownloadUrl = getOpenTofuDownloadUrl(version); + let fileName = `${opentofuToolName}-${version}-${uuidV4()}.zip`; + let opentofuDownloadPath; + + try { + opentofuDownloadPath = await tools.downloadTool(opentofuDownloadUrl, fileName); + } catch (exception) { + throw new Error(tasks.loc("OpenTofuDownloadFailed", opentofuDownloadUrl, exception)); + } + + let opentofuUnzippedPath = await tools.extractZip(opentofuDownloadPath); + cachedToolPath = await tools.cacheDir(opentofuUnzippedPath, opentofuToolName, version); + } + + let opentofuPath = findOpenTofuExecutable(cachedToolPath); + if (!opentofuPath) { + throw new Error(tasks.loc("OpenTofuNotFoundInFolder", cachedToolPath)); + } + + if (!isWindows) { + fs.chmodSync(opentofuPath, "777"); + } + + tasks.setVariable('opentofuLocation', opentofuPath); + + return opentofuPath; +} + +function getOpenTofuDownloadUrl(version: string): string { + let platform: string; + let architecture: string; + + switch(os.type()) { + case "Darwin": + platform = "darwin"; + break; + + case "Linux": + platform = "linux"; + break; + + case "Windows_NT": + platform = "windows"; + break; + + default: + throw new Error(tasks.loc("OperatingSystemNotSupported", os.type())); + } + + switch(os.arch()) { + case "x64": + architecture = "amd64"; + break; + + case "x32": + architecture = "386"; + break; + + case "arm64": + architecture = "arm64"; + break; + + case "arm": + architecture = "arm"; + break; + + default: + throw new Error(tasks.loc("ArchitectureNotSupported", os.arch())); + } + + return `https://github.com/opentofu/opentofu/releases/download/v${version}/tofu_${version}_${platform}_${architecture}.zip`; +} + +function findOpenTofuExecutable(rootFolder: string): string { + let opentofuPath = path.join(rootFolder, opentofuToolName + getExecutableExtension()); + var allPaths = tasks.find(rootFolder); + var matchingResultFiles = tasks.match(allPaths, opentofuPath, rootFolder); + return matchingResultFiles[0]; +} + +function getExecutableExtension(): string { + if (isWindows) { + return ".exe"; + } + + return ""; +} \ No newline at end of file diff --git a/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/task.json b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/task.json new file mode 100644 index 00000000..b5faf155 --- /dev/null +++ b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/task.json @@ -0,0 +1,57 @@ +{ + "id": "15a920cd-dbfd-4e0a-8f1e-9250b0980c88", + "name": "OpenTofuInstaller", + "friendlyName": "OpenTofu tool installer", + "description": "Find in cache or download a specific version of OpenTofu and prepend it to the PATH", + "author": "Cotality", + "helpMarkDown": "[Learn more about this task](https://opentofu.org/docs/)", + "category": "Tool", + "visibility": [ + "Build", + "Release" + ], + "demands": [], + "version": { + "Major": "1", + "Minor": "0", + "Patch": "0" + }, + "instanceNameFormat": "Install OpenTofu $(opentofuVersion)", + "inputs": [ + { + "name": "opentofuVersion", + "type": "string", + "label": "Version", + "defaultValue": "latest", + "required": true, + "helpMarkDown": "The version of OpenTofu which should be installed on the agent if not already present" + } + ], + "execution": { + "Node10": { + "target": "src/index.js" + }, + "Node16": { + "target": "src/index.js" + }, + "Node20_1": { + "target": "src/index.js" + } + }, + "outputVariables": [ + { + "name": "opentofuLocation", + "description": "The location of the OpenTofu binary that was installed on the agent." + } + ], + "messages": { + "VerifyOpenTofuInstallation": "Verifying OpenTofu installation...", + "InputVersionNotValidSemanticVersion": "Input version %s is not a valid semantic version", + "OpenTofuNotFoundInFolder": "OpenTofu executable not found in path %s", + "OperatingSystemNotSupported": "Operating system %s is not supported", + "ArchitectureNotSupported": "Architecture %s is not supported", + "OpenTofuDownloadFailed": "Failed to download OpenTofu from url %s. Error %s", + "OpenTofuVersionNotFound": "Unable to get latest version: %s defaulting to 1.9.0", + "GettingLatestOpenTofuVersion": "Getting latest OpenTofu version." + } +} \ No newline at end of file diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/task.loc.json b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/task.loc.json similarity index 50% rename from Tasks/TerraformInstaller/TerraformInstallerV1/task.loc.json rename to Tasks/OpenTofuInstaller/OpenTofuInstallerV1/task.loc.json index a47d9f60..2f7b6a73 100644 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/task.loc.json +++ b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/task.loc.json @@ -1,9 +1,9 @@ { - "id": "a4789e5d-f6e8-431f-add9-379d640a883c", - "name": "TerraformInstaller", + "id": "15a920cd-dbfd-4e0a-8f1e-9250b0980c88", + "name": "OpenTofuInstaller", "friendlyName": "ms-resource:loc.friendlyName", "description": "ms-resource:loc.description", - "author": "Microsoft Corporation", + "author": "Cotality", "helpMarkDown": "ms-resource:loc.helpMarkDown", "category": "Tool", "visibility": [ @@ -13,43 +13,45 @@ "demands": [], "version": { "Major": "1", - "Minor": "216", + "Minor": "0", "Patch": "0" }, "instanceNameFormat": "ms-resource:loc.instanceNameFormat", "inputs": [ { - "name": "terraformVersion", + "name": "opentofuVersion", "type": "string", - "label": "ms-resource:loc.input.label.terraformVersion", + "label": "ms-resource:loc.input.label.opentofuVersion", "defaultValue": "latest", "required": true, - "helpMarkDown": "ms-resource:loc.input.help.terraformVersion" + "helpMarkDown": "ms-resource:loc.input.help.opentofuVersion" } ], "execution": { "Node10": { "target": "src/index.js" - },"Node16": { + }, + "Node16": { "target": "src/index.js" - },"Node20_1": { + }, + "Node20_1": { "target": "src/index.js" } }, "outputVariables": [ { - "name": "terraformLocation", - "description": "The location of the terraform binary that was installed on the agent." + "name": "opentofuLocation", + "description": "The location of the OpenTofu binary that was installed on the agent." } ], "messages": { - "VerifyTerraformInstallation": "ms-resource:loc.messages.VerifyTerraformInstallation", + "VerifyOpenTofuInstallation": "ms-resource:loc.messages.VerifyOpenTofuInstallation", "InputVersionNotValidSemanticVersion": "ms-resource:loc.messages.InputVersionNotValidSemanticVersion", - "TerraformNotFoundInFolder": "ms-resource:loc.messages.TerraformNotFoundInFolder", + "OpenTofuNotFoundInFolder": "ms-resource:loc.messages.OpenTofuNotFoundInFolder", "OperatingSystemNotSupported": "ms-resource:loc.messages.OperatingSystemNotSupported", "ArchitectureNotSupported": "ms-resource:loc.messages.ArchitectureNotSupported", - "TerraformDownloadFailed": "ms-resource:loc.messages.TerraformDownloadFailed", - "TerraformVersionNotFound": "ms-resource:loc.messages.TerraformVersionNotFound", - "GettingLatestTerraformVersion": "ms-resource:loc.messages.GettingLatestTerraformVersion" + "OpenTofuDownloadFailed": "ms-resource:loc.messages.OpenTofuDownloadFailed", + "OpenTofuVersionNotFound": "ms-resource:loc.messages.OpenTofuVersionNotFound", + "GettingLatestOpenTofuVersion": "ms-resource:loc.messages.GettingLatestOpenTofuVersion" } -} +} \ No newline at end of file diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/tsconfig.json b/Tasks/OpenTofuInstaller/OpenTofuInstallerV1/tsconfig.json similarity index 100% rename from Tasks/TerraformInstaller/TerraformInstallerV0/tsconfig.json rename to Tasks/OpenTofuInstaller/OpenTofuInstallerV1/tsconfig.json diff --git a/Tasks/TerraformTask/TerraformTaskV5/README.md b/Tasks/OpenTofuTask/OpenTofuTaskV1/README.md similarity index 100% rename from Tasks/TerraformTask/TerraformTaskV5/README.md rename to Tasks/OpenTofuTask/OpenTofuTaskV1/README.md diff --git a/Tasks/TerraformTask/TerraformTaskV5/Strings/resources.resjson/en-US/resources.resjson b/Tasks/OpenTofuTask/OpenTofuTaskV1/Strings/resources.resjson/en-US/resources.resjson similarity index 64% rename from Tasks/TerraformTask/TerraformTaskV5/Strings/resources.resjson/en-US/resources.resjson rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Strings/resources.resjson/en-US/resources.resjson index 529dd992..af2a9de7 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Strings/resources.resjson/en-US/resources.resjson +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Strings/resources.resjson/en-US/resources.resjson @@ -1,21 +1,21 @@ { - "loc.friendlyName": "Terraform", - "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/AAf0uqr)", - "loc.description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", - "loc.instanceNameFormat": "Terraform : $(provider)", + "loc.friendlyName": "OpenTofu", + "loc.helpMarkDown": "[Learn more about this task](https://opentofu.org/docs/)", + "loc.description": "Execute OpenTofu commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", + "loc.instanceNameFormat": "OpenTofu : $(provider)", "loc.group.displayName.backendAzureRm": "AzureRM backend configuration", "loc.group.displayName.backendAWS": "Amazon Web Services(AWS) backend configuration", "loc.group.displayName.backendGCP": "Google Cloud Platform(GCP) backend configuration", "loc.input.label.provider": "Provider", - "loc.input.help.provider": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", + "loc.input.help.provider": "The name of the provider used in the OpenTofu configuration files.
Only one provider must be specified in the OpenTofu configuration files in the below specified configuration directory.", "loc.input.label.command": "Command", - "loc.input.help.command": "The terraform command to execute.", + "loc.input.help.command": "The OpenTofu command to execute.", "loc.input.label.customCommand": "Custom command", - "loc.input.help.customCommand": "The custom terraform command to execute.", + "loc.input.help.customCommand": "The custom OpenTofu command to execute.", "loc.input.label.workingDirectory": "Configuration directory", - "loc.input.help.workingDirectory": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", + "loc.input.help.workingDirectory": "Directory containing the OpenTofu configuration files. The default value is $(System.DefaultWorkingDirectory)", "loc.input.label.commandOptions": "Additional command arguments", - "loc.input.help.commandOptions": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", + "loc.input.help.commandOptions": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for tofu plan)
tfplan -auto-approve (for tofu apply)", "loc.input.label.outputTo": "Output to", "loc.input.help.outputTo": "choose output to file or console. ", "loc.input.label.fileName": "Filename", @@ -29,26 +29,26 @@ "loc.input.label.environmentServiceNameGCP": "Google Cloud Platform connection", "loc.input.help.environmentServiceNameGCP": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", "loc.input.label.backendServiceArm": "Azure subscription", - "loc.input.help.backendServiceArm": "Azure resource manager subscription for the terraform backend configuration", + "loc.input.help.backendServiceArm": "Azure resource manager subscription for the OpenTofu backend configuration", "loc.input.label.backendAzureRmResourceGroupName": "Resource group", "loc.input.help.backendAzureRmResourceGroupName": "The name of the resource group which contains the storage account selected below.", "loc.input.label.backendAzureRmStorageAccountName": "Storage account", "loc.input.help.backendAzureRmStorageAccountName": "The name of the storage account which contains the Azure Blob container selected below.", "loc.input.label.backendAzureRmContainerName": "Container", - "loc.input.help.backendAzureRmContainerName": "The name of the Azure Blob container in which to store the Terraform remote state file.", + "loc.input.help.backendAzureRmContainerName": "The name of the Azure Blob container in which to store the OpenTofu remote state file.", "loc.input.label.backendAzureRmKey": "Key", - "loc.input.help.backendAzureRmKey": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", + "loc.input.help.backendAzureRmKey": "The path to the OpenTofu remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", "loc.input.label.backendServiceAWS": "Amazon Web Services connection", - "loc.input.help.backendServiceAWS": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", + "loc.input.help.backendServiceAWS": "Amazon Web Services connection for the OpenTofu backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", "loc.input.label.backendAWSBucketName": "Bucket", - "loc.input.help.backendAWSBucketName": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", + "loc.input.help.backendAWSBucketName": "The name of the Amazon Simple Storage Service(S3) bucket for storing the OpenTofu remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", "loc.input.label.backendAWSKey": "Key", "loc.input.help.backendAWSKey": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", "loc.input.label.backendServiceGCP": "Google Cloud Platform connection", - "loc.input.help.backendServiceGCP": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", + "loc.input.help.backendServiceGCP": "Google Cloud Platform connection for the OpenTofu backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", "loc.input.label.backendGCPBucketName": "Bucket", - "loc.input.help.backendGCPBucketName": "The name of the GCP storage bucket for storing the Terraform remote state file.", + "loc.input.help.backendGCPBucketName": "The name of the GCP storage bucket for storing the OpenTofu remote state file.", "loc.input.label.backendGCPPrefix": "Prefix of state file", "loc.input.help.backendGCPPrefix": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "loc.messages.TerraformToolNotFound": "Failed to find terraform tool in paths" + "loc.messages.OpenTofuToolNotFound": "Failed to find OpenTofu tool in paths" } \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts index ef759eb8..dd5ede93 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 1, "stdout": "Error: No configuration files" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts similarity index 51% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts index 409cf54a..ca78fb06 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - await terraformCommandHandlerAWS.apply(); + await openTofuCommandHandlerAWS.apply(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts index 8ca34089..b38b1c07 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts index 6cb009f9..66e738d5 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - await terraformCommandHandlerAWS.apply(); + await openTofuCommandHandlerAWS.apply(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts index 30407512..6c31113f 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform apply -auto-approve -no-color": { + "tofu apply -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts similarity index 68% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts index 65bc1228..3e2500dc 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.apply(); + const response = await openTofuCommandHandlerAWS.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts index cecaf672..aa995029 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform apply -auto-approve -no-color": { + "tofu apply -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts similarity index 68% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts index 3019f97f..3f68f4a8 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.apply(); + const response = await openTofuCommandHandlerAWS.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts index 9b3e5201..2cb12f1c 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts index 733094cc..1202cb03 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.apply(); + const response = await openTofuCommandHandlerAWS.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts index 19d645a3..fcf26a9b 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 1, "stdout": "Error: No configuration files" } diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts new file mode 100644 index 00000000..f1c3896e --- /dev/null +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts @@ -0,0 +1,14 @@ +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; +import tl = require('azure-pipelines-task-lib'); + +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); + +export async function run() { + try { + await openTofuCommandHandlerAzureRM.apply(); + } catch(error) { + tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); + } +} + +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts index 4e65b12a..a8bbe42e 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts similarity index 50% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts index e2ed5460..246d22f4 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - await terraformCommandHandlerAzureRM.apply(); + await openTofuCommandHandlerAzureRM.apply(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts index 2eef4680..1bae8b23 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve -no-color": { + "tofu apply -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts index f81ddca1..dfeb3c87 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.apply(); + const response = await openTofuCommandHandlerAzureRM.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts index 38312d8f..3e6028e3 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve -no-color": { + "tofu apply -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts index e6213425..c762ec94 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.apply(); + const response = await openTofuCommandHandlerAzureRM.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts index fb1bf70b..d58131c5 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts @@ -17,17 +17,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts similarity index 68% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts index 9a764150..8b11a1c6 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.apply(); + const response = await openTofuCommandHandlerAzureRM.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts index cb3cad92..7688cfa4 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN'] = 'DummyA let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts similarity index 68% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts index c4f9c7ab..60833330 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.apply(); + const response = await openTofuCommandHandlerAzureRM.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts index fd731d5c..9bed74ce 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts similarity index 65% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts index 38012d68..bc2efc88 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.apply(); + const response = await openTofuCommandHandlerAzureRM.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts index 9fb48999..55f980a7 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 1, "stdout": "Error: No configuration files" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts similarity index 51% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts index 07a5c910..7cc76938 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - await terraformCommandHandlerGCP.apply(); + await openTofuCommandHandlerGCP.apply(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts index a863ead9..3e31d55f 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts index 972b6e92..fefc230c 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - await terraformCommandHandlerGCP.apply(); + await openTofuCommandHandlerGCP.apply(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts index 4bc112d3..4d0131da 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform apply -auto-approve -no-color": { + "tofu apply -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts similarity index 69% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts index 196e047a..151c97b8 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.apply(); + const response = await openTofuCommandHandlerGCP.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts index 0417cfbc..7a375c70 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform apply -auto-approve -no-color": { + "tofu apply -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts similarity index 69% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts index c0e23e4a..f9cbe35e 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.apply(); + const response = await openTofuCommandHandlerGCP.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts index 4b26fb09..356494a2 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform apply -auto-approve": { + "tofu apply -auto-approve": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts index 113ecc23..bd125718 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.apply(); + const response = await openTofuCommandHandlerGCP.apply(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts index e9c17e68..5ce90c92 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve": { + "tofu destroy -auto-approve": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts index 7346c224..212ad82a 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - await terraformCommandHandlerAWS.destroy(); + await openTofuCommandHandlerAWS.destroy(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AWSDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts index 6914c6d3..36b0a02b 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve -no-color": { + "tofu destroy -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts similarity index 68% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts index c608083c..bc2eb396 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.destroy(); + const response = await openTofuCommandHandlerAWS.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts index 2de65535..f409e18d 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve -no-color": { + "tofu destroy -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts similarity index 68% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts index b4fbae63..90eab421 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.destroy(); + const response = await openTofuCommandHandlerAWS.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts index b3b6c2b1..3546f6b7 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve": { + "tofu destroy -auto-approve": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts index db2b4532..5bf934d4 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.destroy(); + const response = await openTofuCommandHandlerAWS.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts index a8b0a0bd..5c98776f 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve": { + "tofu destroy -auto-approve": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts similarity index 50% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts index 5d8a7a50..2ade47e1 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - await terraformCommandHandlerAzureRM.destroy(); + await openTofuCommandHandlerAzureRM.destroy(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AzureDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts index 225ce264..19bd1229 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve -no-color": { + "tofu destroy -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts index 5d605c3f..2326cc72 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.destroy(); + const response = await openTofuCommandHandlerAzureRM.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts index 31025690..d38f5ebf 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve -no-color": { + "tofu destroy -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts index 5e8130ef..3764892f 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.destroy(); + const response = await openTofuCommandHandlerAzureRM.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts index 50a305c5..3285ff69 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve": { + "tofu destroy -auto-approve": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts similarity index 65% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts index 45698517..8c468667 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.destroy(); + const response = await openTofuCommandHandlerAzureRM.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts index bd7d3f8a..592bfd1e 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve": { + "tofu destroy -auto-approve": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts index 3858407c..9b3d0701 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - await terraformCommandHandlerGCP.destroy(); + await openTofuCommandHandlerGCP.destroy(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'GCPDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts index ff5551fa..2ab0c0e3 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve -no-color": { + "tofu destroy -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts similarity index 69% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts index 76dfd68a..1e4b11de 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.destroy(); + const response = await openTofuCommandHandlerGCP.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts index 6806eb89..ac1b2b2a 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve -no-color": { + "tofu destroy -auto-approve -no-color": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts similarity index 69% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts index e26084b3..b09ac5d6 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.destroy(); + const response = await openTofuCommandHandlerGCP.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts index 3fb4c2b1..672986fa 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "Executed successfully" }, - "terraform destroy -auto-approve": { + "tofu destroy -auto-approve": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts index ecb87946..651b1e1d 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.destroy(); + const response = await openTofuCommandHandlerGCP.destroy(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts similarity index 82% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts index a94c3381..e9768cc1 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts @@ -21,13 +21,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { + "tofu init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { "code": 1, "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." } diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts new file mode 100644 index 00000000..e8775053 --- /dev/null +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts @@ -0,0 +1,14 @@ +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; +import tl = require('azure-pipelines-task-lib'); + +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); + +export async function run() { + try { + await openTofuCommandHandlerAWS.init(); + } catch(error) { + tl.setResult(tl.TaskResult.Failed, 'AWSInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); + } +} + +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts similarity index 79% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts index add6a6eb..80b009e1 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts @@ -21,13 +21,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { + "tofu init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts index 3793391c..45c3eaa8 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.init(); + const response = await openTofuCommandHandlerAWS.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessAdditionalArgsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts similarity index 79% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts index 833be0ef..58303389 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts @@ -21,13 +21,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { + "tofu init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts index 7beb8d2b..6b8b5434 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.init(); + const response = await openTofuCommandHandlerAWS.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts similarity index 79% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts index 0cb83317..481bab0a 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts @@ -21,13 +21,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { + "tofu init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts index 8523a416..07fa45da 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.init(); + const response = await openTofuCommandHandlerAWS.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts similarity index 82% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts index 14827949..69affa2f 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts @@ -24,13 +24,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { "code": 1, "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." } @@ -39,4 +39,4 @@ let a: ma.TaskLibAnswers = { tr.setAnswers(a); -tr.run(); +tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts similarity index 50% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts index cc143336..1f7dbe01 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - await terraformCommandHandlerAzureRM.init(); + await openTofuCommandHandlerAzureRM.init(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AzureInitFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts similarity index 79% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts index a1777785..8c87e461 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts @@ -24,13 +24,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -no-color -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { + "tofu init -no-color -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { "code": 0, "stdout": "Executed Successfully" } @@ -39,4 +39,4 @@ let a: ma.TaskLibAnswers = { tr.setAnswers(a); -tr.run(); +tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts similarity index 65% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts index 17a2a463..edba5def 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts similarity index 80% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts index b3e2b427..d2f612d0 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts @@ -22,13 +22,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts similarity index 80% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts index 39eb037e..7a9bf5c1 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts @@ -24,13 +24,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=use_azuread_auth=true": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=use_azuread_auth=true": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts similarity index 70% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts index 6963a44a..d05e15be 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts similarity index 68% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts index 0b8a168a..c00abdec 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts similarity index 87% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts index cba7fb12..8f4909c6 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts @@ -24,13 +24,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN'] = 'DummyA let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlags.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlags.ts similarity index 80% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlags.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlags.ts index 31c3dd5c..2d89867d 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlags.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlags.ts @@ -25,13 +25,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN'] = 'DummyA let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=use_azuread_auth=true -backend-config=client_id=DummyServicePrincipalId -backend-config=use_oidc=true -backend-config=ado_pipeline_service_connection_id=AzureRM": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=use_azuread_auth=true -backend-config=client_id=DummyServicePrincipalId -backend-config=use_oidc=true -backend-config=ado_pipeline_service_connection_id=AzureRM": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlagsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlagsL0.ts similarity index 69% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlagsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlagsL0.ts index 270f3a27..5059b0f1 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlagsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlagsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from '../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndCLIFlagsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts similarity index 80% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts index 9ebc9b4c..3931b413 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts @@ -25,13 +25,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN'] = 'DummyA let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=use_azuread_auth=true -backend-config=client_id=DummyServicePrincipalId -backend-config=use_oidc=true -backend-config=ado_pipeline_service_connection_id=AzureRM": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=use_azuread_auth=true -backend-config=client_id=DummyServicePrincipalId -backend-config=use_oidc=true -backend-config=ado_pipeline_service_connection_id=AzureRM": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts similarity index 70% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts index 1c8a4c23..74a5b549 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from '../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallback.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallback.ts similarity index 83% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallback.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallback.ts index d3fdc426..4154de7a 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallback.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallback.ts @@ -26,13 +26,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN'] = 'DummyA let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=use_azuread_auth=true -backend-config=client_id=DummyServicePrincipalId -backend-config=use_oidc=true": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=use_azuread_auth=true -backend-config=client_id=DummyServicePrincipalId -backend-config=use_oidc=true": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallbackL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallbackL0.ts similarity index 70% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallbackL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallbackL0.ts index 2fa3493c..4d78f49f 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallbackL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallbackL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from '../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndIDTokenFallbackL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts similarity index 68% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts index 13de5841..04b6d1a5 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts similarity index 80% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts index 012afd1f..4b7fb247 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts @@ -24,13 +24,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { "code": 0, "stdout": "Executed Successfully" } @@ -39,4 +39,4 @@ let a: ma.TaskLibAnswers = { tr.setAnswers(a); -tr.run(); +tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts similarity index 65% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts index 44a4b635..c77f6797 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts similarity index 81% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts index dbdb7a97..4d3d0159 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts @@ -24,13 +24,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts index f6102050..3d021dcc 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessLowerCaseAuthenticationSchemeL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts similarity index 82% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts index e20a78d1..89c93d15 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts @@ -25,13 +25,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN'] = 'DummyA let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts index dc1f2e9b..bcdf1e5d 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessMalformedAuthenticationSchemeL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts similarity index 81% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts index fdd96476..bb9a39b6 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts @@ -25,13 +25,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_SYSTEMVSSCONNECTION_ACCESSTOKEN'] = 'DummyA let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts index 7d000d3c..e2e797cb 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessMissingAuthenticationSchemeL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts similarity index 80% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts index f4a749ae..31ad6865 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts @@ -24,13 +24,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts similarity index 80% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts index c95e237d..596cbd2d 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts @@ -26,13 +26,13 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=use_azuread_auth=true": { + "tofu init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=use_azuread_auth=true": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts index 18c19c1c..45c0b8fa 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from '../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts index b7a4729c..e0c6ce22 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.init(); + const response = await openTofuCommandHandlerAzureRM.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ @@ -16,4 +16,4 @@ export async function run() { } } -run(); +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts similarity index 87% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts index 1ee7e7ff..ebb6c897 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts @@ -25,13 +25,13 @@ let credentialsFilePath = path.join(__dirname, '..', '..', '..', 'credentials-12 let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { + [`tofu init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { "code": 1, "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." } diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts new file mode 100644 index 00000000..d05d9b1a --- /dev/null +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts @@ -0,0 +1,14 @@ +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; +import tl = require('azure-pipelines-task-lib'); + +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); + +export async function run() { + try { + await openTofuCommandHandlerGCP.init(); + } catch(error) { + tl.setResult(tl.TaskResult.Failed, 'GCPInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); + } +} + +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts similarity index 85% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts index c1d6363c..0274ef8b 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts @@ -25,13 +25,13 @@ let credentialsFilePath = path.join(__dirname, '..', '..', '..', 'credentials-12 let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { + [`tofu init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts index 59da6103..47634c7f 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.init(); + const response = await openTofuCommandHandlerGCP.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts similarity index 85% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts index 39630523..37d166d7 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts @@ -25,13 +25,13 @@ let credentialsFilePath = path.join(__dirname, '..', '..', '..', 'credentials-12 let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { + [`tofu init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts index 79244a86..9f061247 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.init(); + const response = await openTofuCommandHandlerGCP.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts similarity index 86% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts index 1084b72f..cc415994 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts @@ -25,13 +25,13 @@ let credentialsFilePath = path.join(__dirname, '..', '..', '..', 'credentials-12 let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - [`terraform init -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { + [`tofu init -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts index bf0e7984..a61d0f27 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.init(); + const response = await openTofuCommandHandlerGCP.init(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/L0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/L0.ts similarity index 98% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/L0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/L0.ts index bc3a8781..593955f5 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/L0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/L0.ts @@ -2,7 +2,7 @@ import * as assert from 'assert'; import * as ttm from 'azure-pipelines-task-lib/mock-test'; import * as path from 'path'; -describe('Terraform Test Suite', function () { +describe('OpenTofu Test Suite', function () { before(() => { //NOTE: This is here because when debugging in VSCode this is populated and the spawn() method in the testing framework which starts a new NodeJS process does not handle the path with spaces that is set in it. @@ -11,7 +11,7 @@ describe('Terraform Test Suite', function () { after(() => {}); - /* terraform init tests */ + /* opentofu init tests */ function runValidations(validator: () => void, tr: ttm.MockTestRunner) { try { @@ -232,7 +232,7 @@ describe('Terraform Test Suite', function () { assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); assert(tr.errorIssues.length === 1, 'should have one error'); assert(tr.warningIssues.length === 1, 'should have 1 warning'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); + assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe OpenTofu configuration must be valid before initialization so that OpenTofu can determine which modules and providers need to be installed.'), 'Should have shown error message'); }, tr); }); @@ -292,7 +292,7 @@ describe('Terraform Test Suite', function () { assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); assert(tr.errorIssues.length === 1, 'should have one error'); assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); + assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe OpenTofu configuration must be valid before initialization so that OpenTofu can determine which modules and providers need to be installed.'), 'Should have shown error message'); }, tr); }); @@ -352,11 +352,11 @@ describe('Terraform Test Suite', function () { assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); assert(tr.errorIssues.length === 1, 'should have one error'); assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); + assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe OpenTofu configuration must be valid before initialization so that OpenTofu can determine which modules and providers need to be installed.'), 'Should have shown error message'); }, tr); }); - /* terraform validate tests */ + /* opentofu validate tests */ it('azure validate should succeed with no additional args', async () => { let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.js'); @@ -517,8 +517,7 @@ describe('Terraform Test Suite', function () { runValidations(() => { assert(tr.succeeded, 'task should have succeeded'); assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); + assert(tr.errorIssues.length === 0, 'should have no errors'); assert(tr.warningIssues.length === 0, 'should have no warnings'); assert(tr.stdOutContained('GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); }, tr); }); @@ -538,7 +537,7 @@ describe('Terraform Test Suite', function () { }, tr); }); - /* terraform plan tests */ + /* opentofu plan tests */ it('azure plan should succeed with no additional args', async () => { let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.js'); @@ -720,7 +719,7 @@ describe('Terraform Test Suite', function () { }, tr); }); - /* terraform apply tests */ + /* opentofu apply tests */ it('azure apply should succeed with no additional args', async () => { let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.js'); @@ -977,7 +976,7 @@ describe('Terraform Test Suite', function () { }, tr); }); - /* terraform destroy tests */ + /* opentofu destroy tests */ it('azure destroy should succeed with no additional args', async () => { let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.js'); @@ -1186,11 +1185,11 @@ describe('Terraform Test Suite', function () { assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); assert(tr.errorIssues.length === 0, 'should have no errors'); assert(tr.warningIssues.length === 1, 'should have one warning'); - assert(tr.createdWarningIssue('Multiple provider blocks specified in the .tf files in the current working directory.'), 'Should have created warning: Multiple provider blocks specified in the .tf files in the current working drectory.'); + assert(tr.createdWarningIssue('Multiple provider blocks specified in the .tf files in the current working directory.'), 'Should have created warning: Multiple provider blocks specified in the .tf files in the current working directory.'); }, tr); }); - /* test for compareVersions method of BaseTerraformCommandHandler class */ + /* test for compareVersions method of BaseOpenTofuCommandHandler class */ it('compareVersions should compare two versions correctly', async () => { let tp = path.join(__dirname, './L0CompareVersions.js'); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/L0CompareVersions.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/L0CompareVersions.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/L0CompareVersions.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/L0CompareVersions.ts index ad11c078..9980628f 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/L0CompareVersions.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/L0CompareVersions.ts @@ -1,29 +1,29 @@ -import { TerraformCommandHandlerAzureRM } from './../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../src/azure-opentofu-command-handler'; import tasks = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let opentofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); // test cases for compareVersions -if (terraformCommandHandlerAzureRM.compareVersions("0.20.7", "0.20.8") === -1) { +if (opentofuCommandHandlerAzureRM.compareVersions("0.20.7", "0.20.8") === -1) { tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.7", "0.20.8") should have been -1'); } -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.8") === 1) { +if (opentofuCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.8") === 1) { tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.8") should have been 1'); } -if (terraformCommandHandlerAzureRM.compareVersions("0.2.9", "0.2.9") === 0) { +if (opentofuCommandHandlerAzureRM.compareVersions("0.2.9", "0.2.9") === 0) { tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.2.9", "0.2.9") should have been 0'); } -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.09") === 0) { +if (opentofuCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.09") === 0) { tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.09") should have been 0'); } -if (terraformCommandHandlerAzureRM.compareVersions("0.21.9", "0.20.9") === 1) { +if (opentofuCommandHandlerAzureRM.compareVersions("0.21.9", "0.20.9") === 1) { tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.21.9", "0.20.9") should have been 1'); } -if (terraformCommandHandlerAzureRM.compareVersions("1.20.10", "0.20.11") === 1) { +if (opentofuCommandHandlerAzureRM.compareVersions("1.20.10", "0.20.11") === 1) { tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("1.20.10", "0.20.11") should have been 1'); -} +} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/MultipleProviderWarning.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/MultipleProviderWarning.ts similarity index 87% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/MultipleProviderWarning.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/MultipleProviderWarning.ts index 6c5a5590..63bc9259 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/MultipleProviderWarning.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/MultipleProviderWarning.ts @@ -12,13 +12,13 @@ tr.setInput('commandOptions', ''); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider azurerm\nprovider aws\nprovider gcp" } @@ -26,4 +26,4 @@ let a: ma.TaskLibAnswers = { } tr.setAnswers(a); -tr.run(); +tr.run(); \ No newline at end of file diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts new file mode 100644 index 00000000..92b0e146 --- /dev/null +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts @@ -0,0 +1,14 @@ +import { OpenTofuCommandHandlerAzureRM } from '../../src/azure-opentofu-command-handler'; +import tl = require('azure-pipelines-task-lib'); + +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); + +export async function run() { + try { + await openTofuCommandHandlerAzureRM.warnIfMultipleProviders(); + } catch(error) { + tl.setResult(tl.TaskResult.Failed, 'MultipleProviderWarningL0 should have succeeded but failed.'); + } +} + +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/SingleProviderNoWarning.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarning.ts similarity index 86% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/SingleProviderNoWarning.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarning.ts index ff8c8af5..765ae698 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/SingleProviderNoWarning.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarning.ts @@ -12,13 +12,13 @@ tr.setInput('commandOptions', ''); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider azurerm" } @@ -26,4 +26,4 @@ let a: ma.TaskLibAnswers = { } tr.setAnswers(a); -tr.run(); +tr.run(); \ No newline at end of file diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts new file mode 100644 index 00000000..cab2be38 --- /dev/null +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts @@ -0,0 +1,14 @@ +import { OpenTofuCommandHandlerAzureRM } from '../../src/azure-opentofu-command-handler'; +import tl = require('azure-pipelines-task-lib'); + +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); + +export async function run() { + try { + await openTofuCommandHandlerAzureRM.warnIfMultipleProviders(); + } catch(error) { + tl.setResult(tl.TaskResult.Failed, 'SingleProviderNoWarningL0 should have succeeded but failed.'); + } +} + +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts index 53a4c2ff..2c773b24 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform plan -no-color": { + "tofu plan -no-color -detailed-exitcode": { "code": 1, "stdout": "Error: No configuration files" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts similarity index 51% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts index 37a76b20..15c05082 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - await terraformCommandHandlerAWS.plan(); + await openTofuCommandHandlerAWS.plan(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts index 368d11c8..8f784047 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform plan -no-color": { + "tofu plan -no-color -detailed-exitcode": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts index 18c3f1d4..125c23f8 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - await terraformCommandHandlerAWS.plan(); + await openTofuCommandHandlerAWS.plan(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts index efd077a5..e56c7d5c 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform plan -no-color": { + "tofu plan -no-color -detailed-exitcode": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts index df0ae313..e675db11 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.plan(); + const response = await openTofuCommandHandlerAWS.plan(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts similarity index 89% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts index 655abe9b..ece98b14 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts @@ -18,17 +18,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform plan": { + "tofu plan -detailed-exitcode": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts index 6666d40c..412f5999 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.plan(); + const response = await openTofuCommandHandlerAWS.plan(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts index 1be3287d..0d27e2fc 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider azurerm" }, - "terraform plan -no-color": { + "tofu plan -no-color -detailed-exitcode": { "code": 1, "stdout": "Error: No configuration files" } diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts new file mode 100644 index 00000000..9f8b7524 --- /dev/null +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts @@ -0,0 +1,14 @@ +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; +import tl = require('azure-pipelines-task-lib'); + +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); + +export async function run() { + try { + await openTofuCommandHandlerAzureRM.plan(); + } catch(error) { + tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); + } +} + +run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts index 96756555..9bb738a5 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider azurerm" }, - "terraform plan -no-color": { + "tofu plan -no-color -detailed-exitcode": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts similarity index 50% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts index b513f16c..f9f86a7f 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - await terraformCommandHandlerAzureRM.plan(); + await openTofuCommandHandlerAzureRM.plan(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts index 0e22a7e1..c79b9bcb 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider azurerm" }, - "terraform plan -no-color": { + "tofu plan -no-color -detailed-exitcode": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts similarity index 65% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts index c74ce224..6cca5cc3 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.plan(); + const response = await openTofuCommandHandlerAzureRM.plan(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts similarity index 91% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts index 52be7867..c9cc3790 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts @@ -19,17 +19,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider azurerm" }, - "terraform plan": { + "tofu plan -detailed-exitcode": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts similarity index 65% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts index e9006c46..12219ffe 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.plan(); + const response = await openTofuCommandHandlerAzureRM.plan(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts index 1ba7c105..ec019fc0 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform plan": { + "tofu plan -detailed-exitcode": { "code": 1, "stdout": "Error: No configuration files" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts similarity index 51% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts index 498114a1..a39d4348 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - await terraformCommandHandlerGCP.plan(); + await openTofuCommandHandlerGCP.plan(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts index def449a6..66f78bea 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider aws" }, - "terraform plan": { + "tofu plan -detailed-exitcode": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts index b004e73e..943c4acc 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - await terraformCommandHandlerGCP.plan(); + await openTofuCommandHandlerGCP.plan(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts index f7c35e0f..80691ab9 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider gcp" }, - "terraform plan -no-color": { + "tofu plan -no-color -detailed-exitcode": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts index 80d27b90..d8dbbd7a 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.plan(); + const response = await openTofuCommandHandlerGCP.plan(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts similarity index 90% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts index ac985c87..be73318d 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts @@ -20,17 +20,17 @@ process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform providers": { + "tofu providers": { "code": 0, "stdout": "provider gcp" }, - "terraform plan": { + "tofu plan -detailed-exitcode": { "code": 0, "stdout": "Executed successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts index cfe99ad4..bd87d9f7 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.plan(); + const response = await openTofuCommandHandlerGCP.plan(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts index 4db0e496..f57a6db3 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts @@ -12,13 +12,13 @@ tr.setInput('commandOptions', ''); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts index 7aa2af6c..28990b1a 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - await terraformCommandHandlerAWS.validate(); + await openTofuCommandHandlerAWS.validate(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AWSValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts similarity index 84% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts index 4b819a80..477458cd 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts @@ -11,13 +11,13 @@ tr.setInput('commandOptions', '-no-color'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate -no-color": { + "tofu validate -no-color": { "code": 0, "stdout": "Executed Successfully" } @@ -25,4 +25,4 @@ let a: ma.TaskLibAnswers = { } tr.setAnswers(a); -tr.run(); +tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts index f68aec6e..ee9b8da5 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.validate(); + const response = await openTofuCommandHandlerAWS.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts similarity index 87% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts index 699f585b..3f12a8c5 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts @@ -11,13 +11,13 @@ tr.setInput('workingDirectory', 'DummyWorkingDirectory'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts index bcc2bb57..b080f947 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.validate(); + const response = await openTofuCommandHandlerAWS.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts similarity index 86% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts index 07b55455..4a65b29c 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts @@ -10,13 +10,13 @@ tr.setInput('command', 'validate'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts index 53d49a0e..d1e549ca 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; +import { OpenTofuCommandHandlerAWS } from '../../../src/aws-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); +let openTofuCommandHandlerAWS: OpenTofuCommandHandlerAWS = new OpenTofuCommandHandlerAWS(); export async function run() { try { - const response = await terraformCommandHandlerAWS.validate(); + const response = await openTofuCommandHandlerAWS.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts index ab786a7d..fd0b5882 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts @@ -12,13 +12,13 @@ tr.setInput('commandOptions', ''); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts similarity index 50% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts index b5915831..f70377b8 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - await terraformCommandHandlerAzureRM.validate(); + await openTofuCommandHandlerAzureRM.validate(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'AzureValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts similarity index 84% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts index a77bc24b..3cecf9e0 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts @@ -11,13 +11,13 @@ tr.setInput('commandOptions', '-no-color'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate -no-color": { + "tofu validate -no-color": { "code": 0, "stdout": "Executed Successfully" } @@ -25,4 +25,4 @@ let a: ma.TaskLibAnswers = { } tr.setAnswers(a); -tr.run(); +tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts similarity index 65% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts index 2591fdfc..f88f5132 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.validate(); + const response = await openTofuCommandHandlerAzureRM.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts similarity index 87% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts index 94f69ba5..96252e92 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts @@ -11,13 +11,13 @@ tr.setInput('workingDirectory', 'DummyWorkingDirectory'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts index d00984fe..29ea6086 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.validate(); + const response = await openTofuCommandHandlerAzureRM.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts similarity index 86% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts index f47be4b5..26ee3ee7 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts @@ -10,13 +10,13 @@ tr.setInput('command', 'validate'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts similarity index 66% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts index 8e630331..38716030 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from '../../../src/azure-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); +let openTofuCommandHandlerAzureRM: OpenTofuCommandHandlerAzureRM = new OpenTofuCommandHandlerAzureRM(); export async function run() { try { - const response = await terraformCommandHandlerAzureRM.validate(); + const response = await openTofuCommandHandlerAzureRM.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts similarity index 88% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts index 4158f2eb..1307bf4e 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts @@ -12,13 +12,13 @@ tr.setInput('commandOptions', ''); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 1, "stdout": "Execution failed: invalid config files" } diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts index 91ceb426..a6921f00 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - await terraformCommandHandlerGCP.validate(); + await openTofuCommandHandlerGCP.validate(); } catch(error) { tl.setResult(tl.TaskResult.Failed, 'GCPValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts similarity index 84% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts index 25eda041..ed4b28e2 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts @@ -11,13 +11,13 @@ tr.setInput('commandOptions', '-no-color'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate -no-color": { + "tofu validate -no-color": { "code": 0, "stdout": "Executed Successfully" } @@ -25,4 +25,4 @@ let a: ma.TaskLibAnswers = { } tr.setAnswers(a); -tr.run(); +tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts index d05edcf9..28640d97 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.validate(); + const response = await openTofuCommandHandlerGCP.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts similarity index 87% rename from Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts index bdf86b0c..96293cb4 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts @@ -11,13 +11,13 @@ tr.setInput('workingDirectory', 'DummyWorkingDirectory'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts index 186d1e3d..8f38565c 100644 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.validate(); + const response = await openTofuCommandHandlerGCP.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts similarity index 86% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts index c3536a8d..49eb3c58 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts @@ -10,13 +10,13 @@ tr.setInput('command', 'validate'); let a: ma.TaskLibAnswers = { "which": { - "terraform": "terraform" + "tofu": "tofu" }, "checkPath": { - "terraform": true + "tofu": true }, "exec": { - "terraform validate": { + "tofu validate": { "code": 0, "stdout": "Executed Successfully" } diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts similarity index 67% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts index dc265f90..e8b22146 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts @@ -1,11 +1,11 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; +import { OpenTofuCommandHandlerGCP } from '../../../src/gcp-opentofu-command-handler'; import tl = require('azure-pipelines-task-lib'); -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); +let openTofuCommandHandlerGCP: OpenTofuCommandHandlerGCP = new OpenTofuCommandHandlerGCP(); export async function run() { try { - const response = await terraformCommandHandlerGCP.validate(); + const response = await openTofuCommandHandlerGCP.validate(); if (response === 0) { tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); } else{ diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/package.json b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/package.json similarity index 86% rename from Tasks/TerraformTask/TerraformTaskV2/Tests/package.json rename to Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/package.json index c98b53b9..d7fd9dbb 100644 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/package.json +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/Tests/package.json @@ -1,7 +1,7 @@ { - "name": "terraformtask", + "name": "opentofutask", "version": "1.0.0", - "description": "terraform task installer test", + "description": "opentofu task installer test", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" @@ -19,4 +19,4 @@ "dependencies": { "nock": "13.2.4" } -} +} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/ThirdPartyNotices.txt b/Tasks/OpenTofuTask/OpenTofuTaskV1/ThirdPartyNotices.txt similarity index 100% rename from Tasks/TerraformTask/TerraformTaskV1/ThirdPartyNotices.txt rename to Tasks/OpenTofuTask/OpenTofuTaskV1/ThirdPartyNotices.txt diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/icon.png b/Tasks/OpenTofuTask/OpenTofuTaskV1/icon.png new file mode 100644 index 00000000..6f9fdca7 Binary files /dev/null and b/Tasks/OpenTofuTask/OpenTofuTaskV1/icon.png differ diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/icon.svg b/Tasks/OpenTofuTask/OpenTofuTaskV1/icon.svg similarity index 100% rename from Tasks/TerraformInstaller/TerraformInstallerV1/icon.svg rename to Tasks/OpenTofuTask/OpenTofuTaskV1/icon.svg diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/make.json b/Tasks/OpenTofuTask/OpenTofuTaskV1/make.json similarity index 100% rename from Tasks/TerraformInstaller/TerraformInstallerV1/make.json rename to Tasks/OpenTofuTask/OpenTofuTaskV1/make.json diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/package-lock.json b/Tasks/OpenTofuTask/OpenTofuTaskV1/package-lock.json new file mode 100644 index 00000000..71d20aa4 --- /dev/null +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/package-lock.json @@ -0,0 +1,3221 @@ +{ + "name": "opentofutask", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "opentofutask", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "azure-devops-node-api": "^12.0.0", + "azure-pipelines-task-lib": "^4.1.0", + "azure-pipelines-tasks-artifacts-common": "^2.225.0", + "del": "^6.0.0" + }, + "devDependencies": { + "@types/mocha": "^2.2.48", + "@types/node": "^10.17.0", + "@types/q": "^1.5.0", + "@types/uuid": "^8.3.1", + "mocha": "^10.8.2", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.1", + "typescript": "^4.0.0" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/fs-extra": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", + "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@types/mocha": { + "version": "2.2.48", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", + "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" + } + }, + "node_modules/azure-pipelines-task-lib": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", + "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", + "license": "MIT", + "dependencies": { + "adm-zip": "^0.5.10", + "minimatch": "3.0.5", + "nodejs-file-downloader": "^4.11.1", + "q": "^1.5.1", + "semver": "^5.7.2", + "shelljs": "^0.8.5", + "uuid": "^3.0.1" + } + }, + "node_modules/azure-pipelines-tasks-artifacts-common": { + "version": "2.256.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-artifacts-common/-/azure-pipelines-tasks-artifacts-common-2.256.0.tgz", + "integrity": "sha512-b6koP7saEAJgmxlwa7KSWC5grW5Les75yaoTAAdrbpRNPtvxRS1s/dYw99MSjcJ7lzh658Z/pthl1n/K8Qgdhw==", + "license": "MIT", + "dependencies": { + "@types/fs-extra": "8.0.0", + "@types/mocha": "^5.2.6", + "@types/node": "^16.11.39", + "azure-devops-node-api": "^14.0.2", + "azure-pipelines-task-lib": "^4.13.0", + "fs-extra": "8.1.0", + "node-fetch": "^2.7.0", + "semver": "^6.3.1" + } + }, + "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/@types/node": { + "version": "16.18.126", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", + "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/azure-devops-node-api": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", + "integrity": "sha512-QhpgjH1LQ+vgDJ7oBwcmsZ3+o4ZpjLVilw0D3oJQpYpRzN+L39lk5jZDLJ464hLUgsDzWn/Ksv7zLLMKLfoBzA==", + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "2.1.0" + }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/typed-rest-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.1.0.tgz", + "integrity": "sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==", + "license": "MIT", + "dependencies": { + "des.js": "^1.1.0", + "js-md4": "^0.3.2", + "qs": "^6.10.3", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001726", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001726.tgz", + "integrity": "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "license": "MIT", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.176", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.176.tgz", + "integrity": "sha512-2nDK9orkm7M9ZZkjO3PjbEd3VUulQLyg5T9O3enJdFvUg46Hzd4DUvTvAuEgbdHYXyFsiG4A5sO9IzToMH1cDg==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz", + "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/js-md4": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/nodejs-file-downloader": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", + "integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==", + "license": "ISC", + "dependencies": { + "follow-redirects": "^1.15.6", + "https-proxy-agent": "^5.0.0", + "mime-types": "^2.1.27", + "sanitize-filename": "^1.6.3" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/schema-utils": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.2.tgz", + "integrity": "sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/shelljs/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz", + "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.43.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.43.1.tgz", + "integrity": "sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.14.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-loader": { + "version": "9.5.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", + "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "license": "MIT", + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "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.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/watchpack": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz", + "integrity": "sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "5.99.9", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.9.tgz", + "integrity": "sha512-brOPwM3JnmOa+7kd3NsmOUOwbDAj8FT9xDsG3IW0MgbN9yZV7Oi/s/+MNQ/EcSMqw7qfoRyXPoeEWT8zLVdVGg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/Tasks/TerraformTask/TerraformTaskV5/package.json b/Tasks/OpenTofuTask/OpenTofuTaskV1/package.json similarity index 84% rename from Tasks/TerraformTask/TerraformTaskV5/package.json rename to Tasks/OpenTofuTask/OpenTofuTaskV1/package.json index af34e8cc..fe0af5f6 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/package.json +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/package.json @@ -1,28 +1,28 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "npm run compile && mocha --timeout 10000 --require ts-node/register Tests/L0.ts", - "compile": "tsc -b tsconfig.json" - }, - "author": "", - "license": "ISC", - "dependencies": { - "azure-devops-node-api": "^12.0.0", - "azure-pipelines-task-lib": "^4.1.0", - "azure-pipelines-tasks-artifacts-common": "^2.225.0", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "mocha": "^10.8.2", - "ts-loader": "^9.5.2", - "ts-node": "^10.9.1", - "typescript": "^4.0.0" - } -} +{ + "name": "opentofutask", + "version": "1.0.0", + "description": "Azure DevOps task for executing OpenTofu commands", + "main": "index.js", + "scripts": { + "test": "npm run compile && mocha --timeout 10000 --require ts-node/register Tests/L0.ts", + "compile": "tsc -b tsconfig.json" + }, + "author": "Cotality", + "license": "ISC", + "dependencies": { + "azure-devops-node-api": "^12.0.0", + "azure-pipelines-task-lib": "^4.1.0", + "azure-pipelines-tasks-artifacts-common": "^2.225.0", + "del": "^6.0.0" + }, + "devDependencies": { + "@types/mocha": "^2.2.48", + "@types/node": "^10.17.0", + "@types/q": "^1.5.0", + "@types/uuid": "^8.3.1", + "mocha": "^10.8.2", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.1", + "typescript": "^4.0.0" + } +} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/src/aws-terraform-command-handler.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/aws-opentofu-command-handler.ts similarity index 73% rename from Tasks/TerraformTask/TerraformTaskV3/src/aws-terraform-command-handler.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/aws-opentofu-command-handler.ts index 30e21371..827542c3 100644 --- a/Tasks/TerraformTask/TerraformTaskV3/src/aws-terraform-command-handler.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/aws-opentofu-command-handler.ts @@ -1,9 +1,9 @@ import tasks = require('azure-pipelines-task-lib/task'); import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; +import {OpenTofuAuthorizationCommandInitializer} from './opentofu-commands'; +import {BaseOpenTofuCommandHandler} from './base-opentofu-command-handler'; -export class TerraformCommandHandlerAWS extends BaseTerraformCommandHandler { +export class OpenTofuCommandHandlerAWS extends BaseOpenTofuCommandHandler { constructor() { super(); this.providerName = "aws"; @@ -17,16 +17,16 @@ export class TerraformCommandHandlerAWS extends BaseTerraformCommandHandler { this.backendConfig.set('secret_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "password", true)); } - public handleBackend(terraformToolRunner: ToolRunner): void { + public async handleBackend(opentofuToolRunner: ToolRunner) : Promise { let backendServiceName = tasks.getInput("backendServiceAWS", true); this.setupBackend(backendServiceName); for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); + opentofuToolRunner.arg(`-backend-config=${key}=${value}`); } } - public handleProvider(command: TerraformAuthorizationCommandInitializer) { + public async handleProvider(command: OpenTofuAuthorizationCommandInitializer) : Promise { if (command.serviceProvidername) { process.env['AWS_ACCESS_KEY_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "username", false); process.env['AWS_SECRET_ACCESS_KEY'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "password", false); diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/azure-terraform-command-handler.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/azure-opentofu-command-handler.ts similarity index 95% rename from Tasks/TerraformTask/TerraformTaskV5/src/azure-terraform-command-handler.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/azure-opentofu-command-handler.ts index ae07b45d..60a766b5 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/src/azure-terraform-command-handler.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/azure-opentofu-command-handler.ts @@ -1,17 +1,17 @@ import tasks = require("azure-pipelines-task-lib/task"); import {ToolRunner} from "azure-pipelines-task-lib/toolrunner"; -import {TerraformAuthorizationCommandInitializer} from "./terraform-commands"; -import {BaseTerraformCommandHandler} from "./base-terraform-command-handler"; +import {OpenTofuAuthorizationCommandInitializer} from "./opentofu-commands"; +import {BaseOpenTofuCommandHandler} from "./base-opentofu-command-handler"; import {EnvironmentVariableHelper} from "./environment-variables"; import {generateIdToken} from './id-token-generator'; -export class TerraformCommandHandlerAzureRM extends BaseTerraformCommandHandler { +export class OpenTofuCommandHandlerAzureRM extends BaseOpenTofuCommandHandler { constructor() { super(); this.providerName = "azurerm"; } - public async handleBackend(terraformToolRunner: ToolRunner): Promise { + public async handleBackend(opentofuToolRunner: ToolRunner): Promise { let serviceConnectionID = tasks.getInput("backendServiceArm", true); const authorizationScheme = this.mapAuthorizationScheme(tasks.getEndpointAuthorizationScheme(serviceConnectionID, true)); @@ -48,13 +48,13 @@ export class TerraformCommandHandlerAzureRM extends BaseTerraformCommandHandler await this.setCommonVariables(authorizationScheme, serviceConnectionID, fallbackToIdTokenGeneration, backendAzureRmUseCliFlagsForAuthentication); for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); + opentofuToolRunner.arg(`-backend-config=${key}=${value}`); } tasks.debug("Finished setting up backend for authorization scheme: " + authorizationScheme + "."); } - public async handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise { + public async handleProvider(command: OpenTofuAuthorizationCommandInitializer) : Promise { var serviceConnectionID = tasks.getInput("environmentServiceNameAzureRM", true); const authorizationScheme = this.mapAuthorizationScheme(tasks.getEndpointAuthorizationScheme(serviceConnectionID, true)); @@ -177,4 +177,4 @@ enum AuthorizationScheme { ServicePrincipal = "serviceprincipal", ManagedServiceIdentity = "managedserviceidentity", WorkloadIdentityFederation = "workloadidentityfederation" -} +} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/base-terraform-command-handler.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/base-opentofu-command-handler.ts similarity index 72% rename from Tasks/TerraformTask/TerraformTaskV5/src/base-terraform-command-handler.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/base-opentofu-command-handler.ts index 8a73c298..69a57d1c 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/src/base-terraform-command-handler.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/base-opentofu-command-handler.ts @@ -1,23 +1,23 @@ -import {TerraformToolHandler, ITerraformToolHandler} from './terraform'; +import {OpenTofuToolHandler, IOpenTofuToolHandler} from './terraform'; import {ToolRunner, IExecOptions, IExecSyncOptions, IExecSyncResult} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformBaseCommandInitializer, TerraformAuthorizationCommandInitializer} from './terraform-commands'; +import {OpenTofuBaseCommandInitializer, OpenTofuAuthorizationCommandInitializer} from './opentofu-commands'; import tasks = require('azure-pipelines-task-lib/task'); import path = require('path'); import * as uuidV4 from 'uuid/v4'; const fs = require('fs'); const del = require('del'); -export abstract class BaseTerraformCommandHandler { +export abstract class BaseOpenTofuCommandHandler { providerName: string; - terraformToolHandler: ITerraformToolHandler; + opentofuToolHandler: IOpenTofuToolHandler; backendConfig: Map; - abstract handleBackend(terraformToolRunner: ToolRunner) : Promise; - abstract handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise; + abstract handleBackend(opentofuToolRunner: ToolRunner) : Promise; + abstract handleProvider(command: OpenTofuAuthorizationCommandInitializer) : Promise; constructor() { this.providerName = ""; - this.terraformToolHandler = new TerraformToolHandler(tasks); + this.opentofuToolHandler = new OpenTofuToolHandler(tasks); this.backendConfig = new Map(); } @@ -41,16 +41,16 @@ export abstract class BaseTerraformCommandHandler { } public warnIfMultipleProviders(): void { - let terraformPath; + let opentofuPath; try { - terraformPath = tasks.which("terraform", true); + opentofuPath = tasks.which("tofu", true); } catch(err) { - throw new Error(tasks.loc("TerraformToolNotFound")); + throw new Error(tasks.loc("OpenTofuToolNotFound")); } - let terraformToolRunner: ToolRunner = tasks.tool(terraformPath); - terraformToolRunner.arg("providers"); - let commandOutput = terraformToolRunner.execSync({ + let opentofuToolRunner: ToolRunner = tasks.tool(opentofuPath); + opentofuToolRunner.arg("providers"); + let commandOutput = opentofuToolRunner.execSync({ cwd: tasks.getInput("workingDirectory") }); @@ -74,18 +74,18 @@ export abstract class BaseTerraformCommandHandler { } public async init(): Promise { - let initCommand = new TerraformBaseCommandInitializer( + let initCommand = new OpenTofuBaseCommandInitializer( "init", tasks.getInput("workingDirectory"), tasks.getInput("commandOptions") ); - let terraformTool; + let opentofuTool; - terraformTool = this.terraformToolHandler.createToolRunner(initCommand); - await this.handleBackend(terraformTool); + opentofuTool = this.opentofuToolHandler.createToolRunner(initCommand); + await this.handleBackend(opentofuTool); - return await terraformTool.execAsync( { + return await opentofuTool.execAsync( { cwd: initCommand.workingDirectory }); } @@ -100,22 +100,22 @@ export abstract class BaseTerraformCommandHandler { cmd = tasks.getInput("commandOptions") != null ? tasks.getInput("commandOptions"):``; } - let showCommand = new TerraformAuthorizationCommandInitializer( + let showCommand = new OpenTofuAuthorizationCommandInitializer( "show", tasks.getInput("workingDirectory"), tasks.getInput(serviceName, true), cmd ); - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(showCommand); + let opentofuTool; + opentofuTool = this.opentofuToolHandler.createToolRunner(showCommand); await this.handleProvider(showCommand); if(outputTo == "console"){ - return await terraformTool.execAsync( { + return await opentofuTool.execAsync( { cwd: showCommand.workingDirectory}); }else if(outputTo == "file"){ const showFilePath = path.resolve(tasks.getInput("filename")); - let commandOutput = await terraformTool.execSync( { + let commandOutput = await opentofuTool.execSync( { cwd: showCommand.workingDirectory, }); @@ -129,19 +129,19 @@ export abstract class BaseTerraformCommandHandler { let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; let commandOptions = tasks.getInput("commandOptions") != null ? `-json ${tasks.getInput("commandOptions")}`:`-json` - let outputCommand = new TerraformAuthorizationCommandInitializer( + let outputCommand = new OpenTofuAuthorizationCommandInitializer( "output", tasks.getInput("workingDirectory"), tasks.getInput(serviceName, true), commandOptions ); - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(outputCommand); + let opentofuTool; + opentofuTool = this.opentofuToolHandler.createToolRunner(outputCommand); await this.handleProvider(outputCommand); const jsonOutputVariablesFilePath = path.resolve(`output-${uuidV4()}.json`); - let commandOutput = await terraformTool.execSync({ + let commandOutput = await opentofuTool.execSync({ cwd: outputCommand.workingDirectory, }); @@ -154,25 +154,25 @@ export abstract class BaseTerraformCommandHandler { public async plan(): Promise { let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; let commandOptions = tasks.getInput("commandOptions") != null ? `${tasks.getInput("commandOptions")} -detailed-exitcode`:`-detailed-exitcode` - let planCommand = new TerraformAuthorizationCommandInitializer( + let planCommand = new OpenTofuAuthorizationCommandInitializer( "plan", tasks.getInput("workingDirectory"), tasks.getInput(serviceName, true), commandOptions ); - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(planCommand); + let opentofuTool; + opentofuTool = this.opentofuToolHandler.createToolRunner(planCommand); await this.handleProvider(planCommand); this.warnIfMultipleProviders(); - let result = await terraformTool.execAsync( { + let result = await opentofuTool.execAsync( { cwd: planCommand.workingDirectory, ignoreReturnCode: true }); if (result !== 0 && result !== 2) { - throw new Error(tasks.loc("TerraformPlanFailed", result)); + throw new Error(tasks.loc("OpenTofuPlanFailed", result)); } tasks.setVariable('changesPresent', (result === 2).toString(), false, true); return result; @@ -181,23 +181,23 @@ export abstract class BaseTerraformCommandHandler { public async custom(): Promise { const outputTo = tasks.getInput("outputTo"); let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let customCommand = new TerraformAuthorizationCommandInitializer( + let customCommand = new OpenTofuAuthorizationCommandInitializer( tasks.getInput("customCommand"), tasks.getInput("workingDirectory"), tasks.getInput(serviceName, true), tasks.getInput("commandOptions") ); - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(customCommand); + let opentofuTool; + opentofuTool = this.opentofuToolHandler.createToolRunner(customCommand); await this.handleProvider(customCommand); if(outputTo == "console"){ - return await terraformTool.execAsync( { + return await opentofuTool.execAsync( { cwd: customCommand.workingDirectory}); }else if(outputTo == "file"){ const customFilePath = path.resolve(tasks.getInput("filename")); - let commandOutput = await terraformTool.execSync( { + let commandOutput = await opentofuTool.execSync( { cwd: customCommand.workingDirectory}); tasks.writeFile(customFilePath, commandOutput.stdout); @@ -207,7 +207,7 @@ export abstract class BaseTerraformCommandHandler { } public async apply(): Promise { - let terraformTool; + let opentofuTool; let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; let autoApprove: string = '-auto-approve'; let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; @@ -216,18 +216,18 @@ export abstract class BaseTerraformCommandHandler { additionalArgs = `${autoApprove} ${additionalArgs}`; } - let applyCommand = new TerraformAuthorizationCommandInitializer( + let applyCommand = new OpenTofuAuthorizationCommandInitializer( "apply", tasks.getInput("workingDirectory"), tasks.getInput(serviceName, true), additionalArgs ); - terraformTool = this.terraformToolHandler.createToolRunner(applyCommand); + opentofuTool = this.opentofuToolHandler.createToolRunner(applyCommand); await this.handleProvider(applyCommand); this.warnIfMultipleProviders(); - return await terraformTool.execAsync( { + return await opentofuTool.execAsync( { cwd: applyCommand.workingDirectory }); } @@ -242,35 +242,35 @@ export abstract class BaseTerraformCommandHandler { additionalArgs = `${autoApprove} ${additionalArgs}`; } - let destroyCommand = new TerraformAuthorizationCommandInitializer( + let destroyCommand = new OpenTofuAuthorizationCommandInitializer( "destroy", tasks.getInput("workingDirectory"), tasks.getInput(serviceName, true), additionalArgs ); - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(destroyCommand); + let opentofuTool; + opentofuTool = this.opentofuToolHandler.createToolRunner(destroyCommand); await this.handleProvider(destroyCommand); this.warnIfMultipleProviders(); - return await terraformTool.execAsync( { + return await opentofuTool.execAsync( { cwd: destroyCommand.workingDirectory }); }; public async validate(): Promise { - let validateCommand = new TerraformBaseCommandInitializer( + let validateCommand = new OpenTofuBaseCommandInitializer( "validate", tasks.getInput("workingDirectory"), tasks.getInput("commandOptions") ); - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(validateCommand); + let opentofuTool; + opentofuTool = this.opentofuToolHandler.createToolRunner(validateCommand); - return await terraformTool.execAsync({ + return await opentofuTool.execAsync({ cwd: validateCommand.workingDirectory }); } -} +} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/environment-variables.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/environment-variables.ts similarity index 100% rename from Tasks/TerraformTask/TerraformTaskV5/src/environment-variables.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/environment-variables.ts diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/gcp-terraform-command-handler.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/gcp-opentofu-command-handler.ts similarity index 80% rename from Tasks/TerraformTask/TerraformTaskV5/src/gcp-terraform-command-handler.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/gcp-opentofu-command-handler.ts index eb110fd4..d5262f82 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/src/gcp-terraform-command-handler.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/gcp-opentofu-command-handler.ts @@ -1,11 +1,11 @@ import tasks = require('azure-pipelines-task-lib/task'); import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; +import {OpenTofuAuthorizationCommandInitializer} from './opentofu-commands'; +import {BaseOpenTofuCommandHandler} from './base-opentofu-command-handler'; import path = require('path'); import * as uuidV4 from 'uuid/v4'; -export class TerraformCommandHandlerGCP extends BaseTerraformCommandHandler { +export class OpenTofuCommandHandlerGCP extends BaseOpenTofuCommandHandler { constructor() { super(); this.providerName = "gcp"; @@ -35,18 +35,18 @@ export class TerraformCommandHandlerGCP extends BaseTerraformCommandHandler { this.backendConfig.set('credentials', jsonKeyFilePath); } - public async handleBackend(terraformToolRunner: ToolRunner) : Promise { + public async handleBackend(opentofuToolRunner: ToolRunner) : Promise { tasks.debug('Setting up backend GCP.'); let backendServiceName = tasks.getInput("backendServiceGCP", true); this.setupBackend(backendServiceName); for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); + opentofuToolRunner.arg(`-backend-config=${key}=${value}`); } tasks.debug('Finished setting up backend GCP.'); } - public async handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise { + public async handleProvider(command: OpenTofuAuthorizationCommandInitializer) : Promise { if (command.serviceProvidername) { let jsonKeyFilePath = this.getJsonKeyFilePath(command.serviceProvidername); diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/id-token-generator.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/id-token-generator.ts similarity index 97% rename from Tasks/TerraformTask/TerraformTaskV5/src/id-token-generator.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/id-token-generator.ts index f53d14dd..8db1c00f 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/src/id-token-generator.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/id-token-generator.ts @@ -1,33 +1,33 @@ -import tasks = require("azure-pipelines-task-lib/task"); - -export async function generateIdToken(serviceConnectionID : string): Promise { - let tokenGenerator = new TokenGenerator(); - return await tokenGenerator.generate(serviceConnectionID); -} - -export interface ITokenGenerator { - generate(serviceConnectionID : string): Promise; -} - -export class TokenGenerator implements ITokenGenerator { - public async generate(serviceConnectionID : string): Promise { - const url = process.env["SYSTEM_OIDCREQUESTURI"]+"?api-version=7.1&serviceConnectionId=" + serviceConnectionID; - var oidcToken = await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - 'Authorization': 'Bearer '+ tasks.getEndpointAuthorizationParameter('SystemVssConnection', 'AccessToken', false) - } - }).then(async response => { - var oidcObject = await (response?.json()) as {oidcToken: string}; - - if (!oidcObject?.oidcToken){ - throw new Error(tasks.loc("Error_FederatedTokenAquisitionFailed")); - } - return oidcObject.oidcToken; - }); - - tasks.setSecret(oidcToken); - return oidcToken; - } -} +import tasks = require("azure-pipelines-task-lib/task"); + +export async function generateIdToken(serviceConnectionID : string): Promise { + let tokenGenerator = new TokenGenerator(); + return await tokenGenerator.generate(serviceConnectionID); +} + +export interface ITokenGenerator { + generate(serviceConnectionID : string): Promise; +} + +export class TokenGenerator implements ITokenGenerator { + public async generate(serviceConnectionID : string): Promise { + const url = process.env["SYSTEM_OIDCREQUESTURI"]+"?api-version=7.1&serviceConnectionId=" + serviceConnectionID; + var oidcToken = await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': 'Bearer '+ tasks.getEndpointAuthorizationParameter('SystemVssConnection', 'AccessToken', false) + } + }).then(async response => { + var oidcObject = await (response?.json()) as {oidcToken: string}; + + if (!oidcObject?.oidcToken){ + throw new Error(tasks.loc("Error_FederatedTokenAquisitionFailed")); + } + return oidcObject.oidcToken; + }); + + tasks.setSecret(oidcToken); + return oidcToken; + } +} diff --git a/Tasks/TerraformTask/TerraformTaskV1/src/index.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/index.ts similarity index 100% rename from Tasks/TerraformTask/TerraformTaskV1/src/index.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/index.ts diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/oci-terraform-command-handler.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/oci-opentofu-command-handler.ts similarity index 84% rename from Tasks/TerraformTask/TerraformTaskV4/src/oci-terraform-command-handler.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/oci-opentofu-command-handler.ts index 347f9d79..2a306045 100644 --- a/Tasks/TerraformTask/TerraformTaskV4/src/oci-terraform-command-handler.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/oci-opentofu-command-handler.ts @@ -1,11 +1,11 @@ import tasks = require('azure-pipelines-task-lib/task'); import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; +import {OpenTofuAuthorizationCommandInitializer} from './opentofu-commands'; +import {BaseOpenTofuCommandHandler} from './base-opentofu-command-handler'; import path = require('path'); import * as uuidV4 from 'uuid/v4'; -export class TerraformCommandHandlerOCI extends BaseTerraformCommandHandler { +export class OpenTofuCommandHandlerOCI extends BaseOpenTofuCommandHandler { constructor() { super(); this.providerName = "oci"; @@ -28,7 +28,7 @@ export class TerraformCommandHandlerOCI extends BaseTerraformCommandHandler { private setupBackend(backendServiceName: string) { // Unfortunately this seems not to work with OCI provider for the tf statefile - // https://developer.hashicorp.com/terraform/language/settings/backends/configuration#command-line-key-value-pairs + // https://opentofu.org/docs/language/settings/backends/configuration#command-line-key-value-pairs //this.backendConfig.set('address', tasks.getInput("PAR url", true)); //this.backendConfig.set('path', tasks.getInput("PAR path", true)); //this.backendConfig.set('scheme', 'https'); @@ -50,16 +50,16 @@ export class TerraformCommandHandlerOCI extends BaseTerraformCommandHandler { } } - public async handleBackend(terraformToolRunner: ToolRunner) : Promise { + public async handleBackend(opentofuToolRunner: ToolRunner) : Promise { let backendServiceName = tasks.getInput("backendServiceOCI", true); this.setupBackend(backendServiceName); for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); + opentofuToolRunner.arg(`-backend-config=${key}=${value}`); } } - public async handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise { + public async handleProvider(command: OpenTofuAuthorizationCommandInitializer) : Promise { if (command.serviceProvidername) { let privateKeyFilePath = this.getPrivateKeyFilePath(tasks.getEndpointDataParameter(command.serviceProvidername, "privateKey", false)); process.env['TF_VAR_tenancy_ocid'] = tasks.getEndpointDataParameter(command.serviceProvidername, "tenancy", false); @@ -69,4 +69,4 @@ export class TerraformCommandHandlerOCI extends BaseTerraformCommandHandler { process.env['TF_VAR_private_key_path'] = `${privateKeyFilePath}`; } } -} +} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/terraform-commands.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/opentofu-commands.ts similarity index 83% rename from Tasks/TerraformTask/TerraformTaskV5/src/terraform-commands.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/opentofu-commands.ts index da75ba70..a485fac0 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/src/terraform-commands.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/opentofu-commands.ts @@ -1,4 +1,4 @@ -export class TerraformBaseCommandInitializer { +export class OpenTofuBaseCommandInitializer { public readonly name: string; public readonly workingDirectory: string; public readonly additionalArgs: string | undefined; @@ -14,7 +14,7 @@ export class TerraformBaseCommandInitializer { } } -export class TerraformAuthorizationCommandInitializer extends TerraformBaseCommandInitializer { +export class OpenTofuAuthorizationCommandInitializer extends OpenTofuBaseCommandInitializer { readonly serviceProvidername: string; constructor( diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/parent-handler.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/parent-handler.ts similarity index 52% rename from Tasks/TerraformTask/TerraformTaskV5/src/parent-handler.ts rename to Tasks/OpenTofuTask/OpenTofuTaskV1/src/parent-handler.ts index 0fb6bbd6..36d2af6b 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/src/parent-handler.ts +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/parent-handler.ts @@ -1,8 +1,8 @@ -import { BaseTerraformCommandHandler } from './base-terraform-command-handler'; -import { TerraformCommandHandlerAzureRM } from './azure-terraform-command-handler'; -import { TerraformCommandHandlerAWS } from './aws-terraform-command-handler'; -import { TerraformCommandHandlerGCP } from './gcp-terraform-command-handler'; -import { TerraformCommandHandlerOCI } from './oci-terraform-command-handler'; +import { BaseOpenTofuCommandHandler } from './base-opentofu-command-handler'; +import { OpenTofuCommandHandlerAzureRM } from './azure-opentofu-command-handler'; +import { OpenTofuCommandHandlerAWS } from './aws-opentofu-command-handler'; +import { OpenTofuCommandHandlerGCP } from './gcp-opentofu-command-handler'; +import { OpenTofuCommandHandlerOCI } from './oci-opentofu-command-handler'; export interface IParentCommandHandler { execute(providerName: string, command: string): Promise; @@ -11,23 +11,23 @@ export interface IParentCommandHandler { export class ParentCommandHandler implements IParentCommandHandler { public async execute(providerName: string, command: string): Promise { // Create corresponding command handler according to provider name - let provider: BaseTerraformCommandHandler; + let provider: BaseOpenTofuCommandHandler; switch(providerName) { case "azurerm": - provider = new TerraformCommandHandlerAzureRM(); + provider = new OpenTofuCommandHandlerAzureRM(); break; case "aws": - provider = new TerraformCommandHandlerAWS(); + provider = new OpenTofuCommandHandlerAWS(); break; case "gcp": - provider = new TerraformCommandHandlerGCP(); + provider = new OpenTofuCommandHandlerGCP(); break; case "oci": - provider = new TerraformCommandHandlerOCI(); + provider = new OpenTofuCommandHandlerOCI(); break; } diff --git a/Tasks/OpenTofuTask/OpenTofuTaskV1/src/terraform.ts b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/terraform.ts new file mode 100644 index 00000000..96bc7d3f --- /dev/null +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/src/terraform.ts @@ -0,0 +1,33 @@ +import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner' +import { OpenTofuBaseCommandInitializer } from './opentofu-commands' + +export interface IOpenTofuToolHandler { + createToolRunner(command?: OpenTofuBaseCommandInitializer): ToolRunner; +} + +export class OpenTofuToolHandler implements IOpenTofuToolHandler { + private readonly tasks: any; + + constructor(tasks: any) { + this.tasks = tasks; + } + + public createToolRunner(command?: OpenTofuBaseCommandInitializer): ToolRunner { + let opentofuPath; + try { + opentofuPath = this.tasks.which("tofu", true); + } catch(err) { + throw new Error(this.tasks.loc("OpenTofuToolNotFound")); + } + + let opentofuToolRunner: ToolRunner = this.tasks.tool(opentofuPath); + if (command) { + opentofuToolRunner.arg(command.name); + if (command.additionalArgs) { + opentofuToolRunner.line(command.additionalArgs); + } + } + + return opentofuToolRunner; + } +} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/task.json b/Tasks/OpenTofuTask/OpenTofuTaskV1/task.json similarity index 81% rename from Tasks/TerraformTask/TerraformTaskV5/task.json rename to Tasks/OpenTofuTask/OpenTofuTaskV1/task.json index 21d17baa..7bb3f50e 100644 --- a/Tasks/TerraformTask/TerraformTaskV5/task.json +++ b/Tasks/OpenTofuTask/OpenTofuTaskV1/task.json @@ -1,10 +1,10 @@ { - "id": "FE504ACC-6115-40CB-89FF-191386B5E7BF", - "name": "TerraformTask", - "friendlyName": "Terraform", - "description": "Execute terraform commands to manage resources on Microsoft Azure, Amazon Web Services(AWS), Google Cloud Platform(GCP) and Oracle Cloud Infrastructure(OCI).", - "author": "Microsoft Corporation", - "helpMarkDown": "[Learn more about this task](https://aka.ms/devlabs/ado/tf/task/v5)", + "id": "d8fb333d-fbbf-49d0-8669-f45a464f3168", + "name": "OpenTofuTask", + "friendlyName": "OpenTofu", + "description": "Execute OpenTofu commands to manage resources on Microsoft Azure, Amazon Web Services(AWS), Google Cloud Platform(GCP) and Oracle Cloud Infrastructure(OCI).", + "author": "Cotality", + "helpMarkDown": "[Learn more about this task](https://opentofu.org/docs/)", "category": "Deploy", "visibility": [ "Build", @@ -13,11 +13,11 @@ "showEnvironmentVariables": true, "demands": [], "version": { - "Major": "5", - "Minor": "257", - "Patch": "1" + "Major": "1", + "Minor": "0", + "Patch": "0" }, - "instanceNameFormat": "Terraform : $(provider)", + "instanceNameFormat": "OpenTofu : $(provider)", "execution": { "Node10": { "target": "src/index.js" @@ -68,7 +68,7 @@ "label": "Provider", "defaultValue": "azurerm", "required": true, - "helpMarkDown": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", + "helpMarkDown": "The name of the provider used in the OpenTofu configuration files.
Only one provider must be specified in the OpenTofu configuration files in the below specified configuration directory.", "options": { "azurerm": "azurerm", "aws": "aws", @@ -85,7 +85,7 @@ "label": "Command", "defaultValue": "init", "required": true, - "helpMarkDown": "The terraform command to execute.", + "helpMarkDown": "The OpenTofu command to execute.", "options": { "init": "init", "validate": "validate", @@ -105,14 +105,14 @@ "type": "filePath", "label": "Configuration directory", "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", + "helpMarkDown": "Directory containing the OpenTofu configuration files. The default value is $(System.DefaultWorkingDirectory)", "required": false }, { "name": "commandOptions", "type": "string", "label": "Additional command arguments", - "helpMarkDown": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", + "helpMarkDown": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for tofu plan)
tfplan -auto-approve (for tofu apply)", "required": false }, { @@ -133,7 +133,7 @@ "type": "string", "label": "Custom command", "visibleRule": "command = custom", - "helpMarkDown": "The custom terraform command to execute.", + "helpMarkDown": "The custom OpenTofu command to execute.", "required": true }, { @@ -236,7 +236,7 @@ "type": "connectedService:AzureRM", "label": "Azure Backend Service Connection", "required": true, - "helpMarkDown": "Select an Azure Resource Manager Service Connection for the terraform azurerm backend configuration", + "helpMarkDown": "Select an Azure Resource Manager Service Connection for the OpenTofu azurerm backend configuration", "groupName": "backendAzureRm" }, { @@ -277,7 +277,7 @@ "type": "string", "label": "Container", "required": true, - "helpMarkDown": "The name of the Azure Blob container in which to store the Terraform remote state file.", + "helpMarkDown": "The name of the Azure Blob container in which to store the OpenTofu remote state file.", "groupName": "backendAzureRm", "properties": { "EditableOptions": "True" @@ -288,7 +288,7 @@ "type": "string", "label": "Key", "required": true, - "helpMarkDown": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", + "helpMarkDown": "The path to the OpenTofu remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", "groupName": "backendAzureRm" }, { @@ -296,7 +296,7 @@ "type": "connectedService:AWSServiceEndpoint", "label": "Amazon Web Services connection", "required": true, - "helpMarkDown": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", + "helpMarkDown": "Amazon Web Services connection for the OpenTofu backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", "groupName": "backendAWS" }, { @@ -304,7 +304,7 @@ "type": "pickList", "label": "Bucket", "required": true, - "helpMarkDown": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", + "helpMarkDown": "The name of the Amazon Simple Storage Service(S3) bucket for storing the OpenTofu remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", "groupName": "backendAWS", "properties": { "EditableOptions": "True" @@ -323,7 +323,7 @@ "type": "connectedService:GoogleCloudServiceEndpoint", "label": "Google Cloud Platform connection", "required": true, - "helpMarkDown": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", + "helpMarkDown": "Google Cloud Platform connection for the OpenTofu backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", "groupName": "backendGCP" }, { @@ -331,7 +331,7 @@ "type": "pickList", "label": "Bucket", "required": true, - "helpMarkDown": "The name of the GCP storage bucket for storing the Terraform remote state file.", + "helpMarkDown": "The name of the GCP storage bucket for storing the OpenTofu remote state file.", "groupName": "backendGCP", "properties": { "EditableOptions": "True" @@ -350,24 +350,24 @@ "type": "connectedService:OracleCloudInfrastructureServiceEndpoint", "label": "Oracle Cloud Infrastructure connection", "required": true, - "helpMarkDown": "Oracle Cloud Infrastructure connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Oracle Cloud Platform service connection using the 'Add' or 'Manage' button.", + "helpMarkDown": "Oracle Cloud Infrastructure connection for the OpenTofu backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Oracle Cloud Platform service connection using the 'Add' or 'Manage' button.", "groupName": "backendOCI" }, { "name": "backendOCIPar", "type": "string", - "label": "PAR for Terraform remote state file", + "label": "PAR for OpenTofu remote state file", "required": false, - "helpMarkDown": "The OCI object storage PAR configuration for the Terraform remote state file (optional)", + "helpMarkDown": "The OCI object storage PAR configuration for the OpenTofu remote state file (optional)", "groupName": "backendOCI" }, { "name": "backendOCIConfigGenerate", "type": "pickList", - "label": "Generate the Terraform remote state file config (Use Yes when not included in TF files)", + "label": "Generate the OpenTofu remote state file config (Use Yes when not included in TF files)", "required": true, "defaultValue": "yes", - "helpMarkDown": "Generates the Terraform remote state file config, select Yes when not included in TF files, othwerwise No.", + "helpMarkDown": "Generates the OpenTofu remote state file config, select Yes when not included in TF files, othwerwise No.", "groupName": "backendOCI", "options": { "yes": "yes", @@ -390,18 +390,18 @@ "outputVariables": [ { "name": "jsonPlanFilePath", - "description": "The location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." + "description": "The location of the OpenTofu plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." }, { "name": "jsonOutputVariablesPath", - "description": "The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'output'." + "description": "The location of the JSON file which contains the output variables set by the user in the OpenTofu config files.

Note: This variable will only be set if 'command' input is set to 'output'." }, { "name": "changesPresent", - "description": "A boolean indicating if the terraform plan found any changes to apply." + "description": "A boolean indicating if the OpenTofu plan found any changes to apply." } ], "messages": { - "TerraformToolNotFound": "Failed to find terraform tool in paths" + "OpenTofuToolNotFound": "Failed to find OpenTofu tool in paths" } -} +} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/tsconfig.json b/Tasks/OpenTofuTask/OpenTofuTaskV1/tsconfig.json similarity index 100% rename from Tasks/TerraformTask/TerraformTaskV3/tsconfig.json rename to Tasks/OpenTofuTask/OpenTofuTaskV1/tsconfig.json diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/README.md b/Tasks/TerraformInstaller/TerraformInstallerV0/README.md deleted file mode 100644 index 8b979030..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV0/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Terraform tool installer - - -### Overview - -The Terraform Tool Installer task acquires a specified version of [Terraform](https://www.terraform.io/) from the Internet or the tools cache and prepends it to the PATH of the Azure Pipelines Agent (hosted or private). Use this task to change the version of Terraform used in subsequent tasks like [Terraform](https://aka.ms/AAf0uqr). -Adding this task before the [Terraform task](https://aka.ms/AAf0uqr) in a build definition ensures you are using that task with the right Terraform version. - - -### Contact Information - -Please report a problem at [Developer Community Forum](https://developercommunity.visualstudio.com/spaces/21/index.html) if you are facing problems in making this task work. You can also share feedback about the task like, what more functionality should be added to the task, what other tasks you would like to have, at the same place. - - -### Pre-requisites for the task - -The task can run on the following build agent operating systems: -- Windows -- MacOS -- Linux - -** Terraform is already installed on hosted Ubuntu build agents. So, this task may be omitted for these agents unless a different vesrion of Terraform is needed. - -### Parameters of the task - -* **Display name\*:** Provide a name to identify the task among others in your pipeline. - -* **Version\*:** Specify the keyword 'latest' to get the latest released version or specify exact version of Terraform to install. -Example: - To install latest Terraform version use keyword: latest. To install specific version Ex. 1.0.8, use 1.0.8. -For getting more details about exact version, refer [this link](https://releases.hashicorp.com/terraform/) - - -### Output Variables - -* **Terraform location:** This variable can be used to refer to the location of the terraform binary that was installed on the agent in subsequent tasks. - -### Example Task Usage -Below is a basic example usage of a few commands within the TerraformInstaller task. - -```yaml -- task: TerraformInstaller@0 - displayName: Install Terraform 1.5.7 - inputs: - terraformVersion: 1.5.7 -``` diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/Strings/resources.resjson/en-US/resources.resjson b/Tasks/TerraformInstaller/TerraformInstallerV0/Strings/resources.resjson/en-US/resources.resjson deleted file mode 100644 index e90db0b2..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV0/Strings/resources.resjson/en-US/resources.resjson +++ /dev/null @@ -1,16 +0,0 @@ -{ - "loc.friendlyName": "Terraform tool installer", - "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/AAf1a0p)", - "loc.description": "Find in cache or download a specific version of Terraform and prepend it to the PATH", - "loc.instanceNameFormat": "Install Terraform $(terraformVersion)", - "loc.input.label.terraformVersion": "Version", - "loc.input.help.terraformVersion": "The version of Terraform which should be installed on the agent if not already present", - "loc.messages.VerifyTerraformInstallation": "Verifying Terraform installation...", - "loc.messages.InputVersionNotValidSemanticVersion": "Input version %s is not a valid semantic version", - "loc.messages.TerraformNotFoundInFolder": "Terraform executable not found in path %s", - "loc.messages.OperatingSystemNotSupported": "Operating system %s is not supported", - "loc.messages.ArchitectureNotSupported": "Architecture %s is not supported", - "loc.messages.TerraformDownloadFailed": "Failed to download Terraform from url %s. Error %s", - "loc.messages.TerraformVersionNotFound": "Unable to get latest version: using 1.1.6", - "loc.messages.GettingLatestTerraformVersion": "Getting latest Terraform version." -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/icon.png b/Tasks/TerraformInstaller/TerraformInstallerV0/icon.png deleted file mode 100644 index 7f0bb0f4..00000000 Binary files a/Tasks/TerraformInstaller/TerraformInstallerV0/icon.png and /dev/null differ diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/package-lock.json b/Tasks/TerraformInstaller/TerraformInstallerV0/package-lock.json deleted file mode 100644 index 41f0542e..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV0/package-lock.json +++ /dev/null @@ -1,753 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^3.3.1", - "azure-pipelines-tool-lib": "^1.1.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.7" - }, - "devDependencies": { - "@types/mocha": "^9.1.0", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "typescript": "^4.0.0" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" - }, - "node_modules/@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/azure-pipelines-task-lib": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz", - "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==", - "dependencies": { - "minimatch": "3.0.5", - "mockery": "^1.7.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "node_modules/azure-pipelines-tool-lib": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.1.0.tgz", - "integrity": "sha512-OMy8F21rQnl3u8XoLQ8YFv6CO+he6yJRd47A9M3xpyl64kTfmuftNkJQBQw0T5XxQLHF7ExNv7zVkizWGf2a1g==", - "dependencies": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^3.1.10", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mockery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typed-rest-client": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.6.tgz", - "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/underscore": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "extraneous": true - } - } -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/package.json b/Tasks/TerraformInstaller/TerraformInstallerV0/package.json deleted file mode 100644 index f22dcbfd..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV0/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^3.3.1", - "azure-pipelines-tool-lib": "^1.1.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.7" - }, - "devDependencies": { - "@types/mocha": "^9.1.0", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "typescript": "^4.0.0" - } -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/src/index.ts b/Tasks/TerraformInstaller/TerraformInstallerV0/src/index.ts deleted file mode 100644 index 4e9b377c..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV0/src/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import tools = require('azure-pipelines-tool-lib/tool'); -import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; -import path = require('path'); -import * as installer from './terraform-installer'; - -async function configureTerraform() { - let inputVersion = tasks.getInput("terraformVersion", true); - let terraformPath = await installer.downloadTerraform(inputVersion); - let envPath = process.env['PATH']; - - // Prepend the tools path. Instructs the agent to prepend for future tasks - if (envPath && !envPath.startsWith(path.dirname(terraformPath))) { - tools.prependPath(path.dirname(terraformPath)); - } -} - -async function verifyTerraform() { - console.log(tasks.loc("VerifyTerraformInstallation")); - let terraformPath = tasks.which("terraform", true); - let terraformTool : ToolRunner = tasks.tool(terraformPath); - terraformTool.arg("version"); - return terraformTool.exec(); -} - -async function run() { - tasks.setResourcePath(path.join(__dirname, '..', 'task.json')); - - try { - await configureTerraform(); - await verifyTerraform(); - tasks.setResult(tasks.TaskResult.Succeeded, ""); - } catch (error) { - tasks.setResult(tasks.TaskResult.Failed, error); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/task.json b/Tasks/TerraformInstaller/TerraformInstallerV0/task.json deleted file mode 100644 index b2ffce48..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV0/task.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "id": "a4789e5d-f6e8-431f-add9-379d640a883c", - "name": "TerraformInstaller", - "friendlyName": "Terraform tool installer", - "description": "Find in cache or download a specific version of Terraform and prepend it to the PATH", - "author": "Microsoft Corporation", - "helpMarkDown": "[Learn more about this task](https://aka.ms/AAf1a0p)", - "category": "Tool", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "0", - "Minor": "202", - "Patch": "0" - }, - "instanceNameFormat": "Install Terraform $(terraformVersion)", - "inputs": [ - { - "name": "terraformVersion", - "type": "string", - "label": "Version", - "defaultValue": "latest", - "required": true, - "helpMarkDown": "The version of Terraform which should be installed on the agent if not already present" - } - ], - "execution": { - "Node10": { - "target": "src/index.js" - } - }, - "outputVariables": [ - { - "name": "terraformLocation", - "description": "The location of the terraform binary that was installed on the agent." - } - ], - "messages": { - "VerifyTerraformInstallation": "Verifying Terraform installation...", - "InputVersionNotValidSemanticVersion": "Input version %s is not a valid semantic version", - "TerraformNotFoundInFolder": "Terraform executable not found in path %s", - "OperatingSystemNotSupported": "Operating system %s is not supported", - "ArchitectureNotSupported": "Architecture %s is not supported", - "TerraformDownloadFailed": "Failed to download Terraform from url %s. Error %s", - "TerraformVersionNotFound": "Unable to get latest version: %s defaulting to 1.0.8", - "GettingLatestTerraformVersion": "Getting latest Terraform version." - } -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV0/task.loc.json b/Tasks/TerraformInstaller/TerraformInstallerV0/task.loc.json deleted file mode 100644 index 9875184d..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV0/task.loc.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "id": "a4789e5d-f6e8-431f-add9-379d640a883c", - "name": "TerraformInstaller", - "friendlyName": "ms-resource:loc.friendlyName", - "description": "ms-resource:loc.description", - "author": "Microsoft Corporation", - "helpMarkDown": "ms-resource:loc.helpMarkDown", - "category": "Tool", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "0", - "Minor": "202", - "Patch": "0" - }, - "instanceNameFormat": "ms-resource:loc.instanceNameFormat", - "inputs": [ - { - "name": "terraformVersion", - "type": "string", - "label": "ms-resource:loc.input.label.terraformVersion", - "defaultValue": "latest", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.terraformVersion" - } - ], - "execution": { - "Node10": { - "target": "src/index.js" - } - }, - "outputVariables": [ - { - "name": "terraformLocation", - "description": "The location of the terraform binary that was installed on the agent." - } - ], - "messages": { - "VerifyTerraformInstallation": "ms-resource:loc.messages.VerifyTerraformInstallation", - "InputVersionNotValidSemanticVersion": "ms-resource:loc.messages.InputVersionNotValidSemanticVersion", - "TerraformNotFoundInFolder": "ms-resource:loc.messages.TerraformNotFoundInFolder", - "OperatingSystemNotSupported": "ms-resource:loc.messages.OperatingSystemNotSupported", - "ArchitectureNotSupported": "ms-resource:loc.messages.ArchitectureNotSupported", - "TerraformDownloadFailed": "ms-resource:loc.messages.TerraformDownloadFailed", - "TerraformVersionNotFound": "ms-resource:loc.messages.TerraformVersionNotFound", - "GettingLatestTerraformVersion": "ms-resource:loc.messages.GettingLatestTerraformVersion" - } -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/Strings/resources.resjson/en-US/resources.resjson b/Tasks/TerraformInstaller/TerraformInstallerV1/Strings/resources.resjson/en-US/resources.resjson deleted file mode 100644 index e90db0b2..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/Strings/resources.resjson/en-US/resources.resjson +++ /dev/null @@ -1,16 +0,0 @@ -{ - "loc.friendlyName": "Terraform tool installer", - "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/AAf1a0p)", - "loc.description": "Find in cache or download a specific version of Terraform and prepend it to the PATH", - "loc.instanceNameFormat": "Install Terraform $(terraformVersion)", - "loc.input.label.terraformVersion": "Version", - "loc.input.help.terraformVersion": "The version of Terraform which should be installed on the agent if not already present", - "loc.messages.VerifyTerraformInstallation": "Verifying Terraform installation...", - "loc.messages.InputVersionNotValidSemanticVersion": "Input version %s is not a valid semantic version", - "loc.messages.TerraformNotFoundInFolder": "Terraform executable not found in path %s", - "loc.messages.OperatingSystemNotSupported": "Operating system %s is not supported", - "loc.messages.ArchitectureNotSupported": "Architecture %s is not supported", - "loc.messages.TerraformDownloadFailed": "Failed to download Terraform from url %s. Error %s", - "loc.messages.TerraformVersionNotFound": "Unable to get latest version: using 1.1.6", - "loc.messages.GettingLatestTerraformVersion": "Getting latest Terraform version." -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/ThirdPartyNotices.txt b/Tasks/TerraformInstaller/TerraformInstallerV1/ThirdPartyNotices.txt deleted file mode 100644 index fbfc0012..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/ThirdPartyNotices.txt +++ /dev/null @@ -1,526 +0,0 @@ - -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION -Do Not Translate or Localize - -Terraform incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. - -1. @types/semver (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -2. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -3. @types/q (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -4. @types/uuid (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -5. azure-pipelines-task-lib (https://github.com/microsoft/azure-pipelines-task-lib) -6. minimatch (https://github.com/isaacs/minimatch) -7. Mockery (https://github.com/mfncooper/mockery) -8. Q (https://github.com/kriskowal/q) -9. semver (https://github.com/npm/node-semver/) -10. ShellJS (https://github.com/shelljs/shelljs) -11. uuid (https://www.npmjs.com/package/node-uuid) -12. azure-pipelines-tool-lib (https://github.com/microsoft/azure-pipelines-tool-lib) -13. semver-compare (https://github.com/substack/semver-compare.git) -14. typed-rest-client (https://github.com/Microsoft/typed-rest-client.git) -15. balanced-match (https://github.com/juliangruber/balanced-match.git) -16. brace-expansion (https://github.com/juliangruber/brace-expansion.git) -17. concat-map (https://github.com/substack/node-concat-map.git) -18. tunnel (https://github.com/koichik/node-tunnel.git) -19. underscore (https://github.com/jashkenas/underscore.git) - -%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/node NOTICES, INFORMATION, AND LICENSE - -%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/q NOTICES, INFORMATION, AND LICENSE - -%% @types/semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF @types/semver NOTICES, INFORMATION, AND LICENSE - -%% @types/uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF @types/uuid NOTICES, INFORMATION, AND LICENSE - -%% azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -========================================= -END OF azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE - -%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF minimatch NOTICES, INFORMATION, AND LICENSE - -%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyrights for code authored by Yahoo! Inc. is licensed under the following -terms: - -MIT License - - Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -========================================= -END OF Mockery NOTICES, INFORMATION, AND LICENSE - -%% Q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - - The file q.js is prefaced by the following additional third-party subcomponent information: - - /*! - * - * Copyright 2009-2012 Kris Kowal under the terms of the MIT - * license found at http://github.com/kriskowal/q/raw/master/LICENSE - * - * With parts by Tyler Close - * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found - * at http://www.opensource.org/licenses/mit-license.html - * Forked at ref_send.js version: 2009-05-11 - * - * With parts by Mark Miller - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -========================================= -END OF Q NOTICES, INFORMATION, AND LICENSE - -%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ========================================= - END OF semver NOTICES, INFORMATION, AND LICENSE - - %% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE - ========================================= - Copyright (c) 2012, Artur Adib - All rights reserved. - - You may use this project under the terms of the New BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF ShellJS NOTICES, INFORMATION, AND LICENSE - -%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) 2010-2012 Robert Kieffer - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF uuid NOTICES, INFORMATION, AND LICENSE - -%% azure-pipelines-tool-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE -========================================= -END OF azure-pipelines-tool-lib NOTICES, INFORMATION, AND LICENSE - -%% semver-compare NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -This software is released under the MIT license: - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF semver-compare NOTICES, INFORMATION, AND LICENSE - -%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Typed Rest Client for Node.js - - Copyright (c) Microsoft Corporation - - All rights reserved. - - MIT License - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and - associated documentation files (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT - LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN - NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE - SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE - -%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies - of the Software, and to permit persons to whom the Software is furnished to do - so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -========================================= -END OF balanced-match NOTICES, INFORMATION, AND LICENSE - -%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -========================================= -END OF brace-expansion NOTICES, INFORMATION, AND LICENSE - -%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -This software is released under the MIT license: - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF concat-map NOTICES, INFORMATION, AND LICENSE - -%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) 2012 Koichi Kobayashi - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF tunnel NOTICES, INFORMATION, AND LICENSE - -%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF underscore NOTICES, INFORMATION, AND LICENSE \ No newline at end of file diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/icon.png b/Tasks/TerraformInstaller/TerraformInstallerV1/icon.png deleted file mode 100644 index 7f0bb0f4..00000000 Binary files a/Tasks/TerraformInstaller/TerraformInstallerV1/icon.png and /dev/null differ diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/package-lock.json b/Tasks/TerraformInstaller/TerraformInstallerV1/package-lock.json deleted file mode 100644 index da4f2808..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/package-lock.json +++ /dev/null @@ -1,752 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^4.1.0", - "azure-pipelines-tool-lib": "^2.0.0-preview", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.7" - }, - "devDependencies": { - "@types/mocha": "^9.1.0", - "@types/node": "^16.11.39", - "@types/q": "^1.5.0", - "typescript": "^4.0.0" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", - "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", - "dev": true - }, - "node_modules/@types/node": { - "version": "16.18.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", - "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==" - }, - "node_modules/@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.2.0.tgz", - "integrity": "sha512-WUj3XxTWVKxcphLaIHB8OULXC1GT18EAHkibvF5nQ86+dhOtn/KQW44axV8D+udDSM5HAMZxOLe93CPGBqcC5w==", - "dependencies": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "node_modules/azure-pipelines-tool-lib": { - "version": "2.0.0-preview", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.0-preview.tgz", - "integrity": "sha512-OeivwKLpLMsvGpZ2H+2UPxFwwqNkV8TzfKByqjYAllzGDAw4BvciAdjCMwkpGdTOnzfPbRpr33sy48kn7RqfKA==", - "dependencies": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.0.0-preview", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/http-response-object/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mockery": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", - "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typed-rest-client": { - "version": "1.8.6", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.6.tgz", - "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/underscore": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", - "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - } - } -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/src/index.ts b/Tasks/TerraformInstaller/TerraformInstallerV1/src/index.ts deleted file mode 100644 index 4e9b377c..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/src/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import tools = require('azure-pipelines-tool-lib/tool'); -import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; -import path = require('path'); -import * as installer from './terraform-installer'; - -async function configureTerraform() { - let inputVersion = tasks.getInput("terraformVersion", true); - let terraformPath = await installer.downloadTerraform(inputVersion); - let envPath = process.env['PATH']; - - // Prepend the tools path. Instructs the agent to prepend for future tasks - if (envPath && !envPath.startsWith(path.dirname(terraformPath))) { - tools.prependPath(path.dirname(terraformPath)); - } -} - -async function verifyTerraform() { - console.log(tasks.loc("VerifyTerraformInstallation")); - let terraformPath = tasks.which("terraform", true); - let terraformTool : ToolRunner = tasks.tool(terraformPath); - terraformTool.arg("version"); - return terraformTool.exec(); -} - -async function run() { - tasks.setResourcePath(path.join(__dirname, '..', 'task.json')); - - try { - await configureTerraform(); - await verifyTerraform(); - tasks.setResult(tasks.TaskResult.Succeeded, ""); - } catch (error) { - tasks.setResult(tasks.TaskResult.Failed, error); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/src/terraform-installer.ts b/Tasks/TerraformInstaller/TerraformInstallerV1/src/terraform-installer.ts deleted file mode 100644 index e588c19c..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/src/terraform-installer.ts +++ /dev/null @@ -1,141 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import tools = require('azure-pipelines-tool-lib/tool'); -import path = require('path'); -import os = require('os'); -import fs = require('fs'); - -const uuidV4 = require('uuid/v4'); -const fetch = require('node-fetch'); -const HttpsProxyAgent = require('https-proxy-agent'); - -const terraformToolName = "terraform"; -const isWindows = os.type().match(/^Win/); -const proxy = tasks.getHttpProxyConfiguration(); -export async function downloadTerraform(inputVersion: string): Promise { - var latestVersion: string = ""; - if(inputVersion.toLowerCase() === 'latest') { - console.log(tasks.loc("GettingLatestTerraformVersion")); - if(proxy == null){ - await fetch('https://checkpoint-api.hashicorp.com/v1/check/terraform') - .then((response: { json: () => any; }) => response.json()) - .then((data: { [x: string]: any; }) => { - latestVersion = data.current_version; - }) - .catch((exception: any) => { - console.warn(tasks.loc("TerraformVersionNotFound")); - - latestVersion = '1.9.8'; - }) - } - else - { - - var proxyUrl = proxy.proxyUsername !="" ? proxy.proxyUrl.split("://")[0] + '://' + proxy.proxyUsername + ':' + proxy.proxyPassword + '@' + proxy.proxyUrl.split("://")[1]:proxy.proxyUrl; - var proxyAgent = new HttpsProxyAgent(proxyUrl); - await fetch('https://checkpoint-api.hashicorp.com/v1/check/terraform', { agent: proxyAgent}) - .then((response: { json: () => any; }) => response.json()) - .then((data: { [x: string]: any; }) => { - latestVersion = data.current_version; - }) - .catch((exception: any) => { - console.warn(tasks.loc("TerraformVersionNotFound")); - latestVersion = '1.9.8'; - }) - } - } - var version = latestVersion != "" ? tools.cleanVersion(latestVersion) : tools.cleanVersion(inputVersion); - - if (!version) { - throw new Error(tasks.loc("InputVersionNotValidSemanticVersion", inputVersion)); - } - - let cachedToolPath = tools.findLocalTool(terraformToolName, version); - if (!cachedToolPath) { - let terraformDownloadUrl = getTerraformDownloadUrl(version); - let fileName = `${terraformToolName}-${version}-${uuidV4()}.zip`; - let terraformDownloadPath; - - try { - terraformDownloadPath = await tools.downloadTool(terraformDownloadUrl, fileName); - } catch (exception) { - throw new Error(tasks.loc("TerraformDownloadFailed", terraformDownloadUrl, exception)); - } - - let terraformUnzippedPath = await tools.extractZip(terraformDownloadPath); - cachedToolPath = await tools.cacheDir(terraformUnzippedPath, terraformToolName, version); - } - - let terraformPath = findTerraformExecutable(cachedToolPath); - if (!terraformPath) { - throw new Error(tasks.loc("TerraformNotFoundInFolder", cachedToolPath)); - } - - if (!isWindows) { - fs.chmodSync(terraformPath, "777"); - } - - tasks.setVariable('terraformLocation', terraformPath); - - return terraformPath; -} - -function getTerraformDownloadUrl(version: string): string { - let platform: string; - let architecture: string; - - switch(os.type()) { - case "Darwin": - platform = "darwin"; - break; - - case "Linux": - platform = "linux"; - break; - - case "Windows_NT": - platform = "windows"; - break; - - default: - throw new Error(tasks.loc("OperatingSystemNotSupported", os.type())); - } - - switch(os.arch()) { - case "x64": - architecture = "amd64"; - break; - - case "x32": - architecture = "386"; - break; - - case "arm64": - architecture = "arm64"; - break; - - case "arm": - architecture = "arm"; - break; - - default: - throw new Error(tasks.loc("ArchitectureNotSupported", os.arch())); - } - - return `https://releases.hashicorp.com/terraform/${version}/terraform_${version}_${platform}_${architecture}.zip`; -} - -function findTerraformExecutable(rootFolder: string): string { - let terraformPath = path.join(rootFolder, terraformToolName + getExecutableExtension()); - var allPaths = tasks.find(rootFolder); - var matchingResultFiles = tasks.match(allPaths, terraformPath, rootFolder); - return matchingResultFiles[0]; -} - -function getExecutableExtension(): string { - if (isWindows) { - return ".exe"; - } - - return ""; - -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/task.json b/Tasks/TerraformInstaller/TerraformInstallerV1/task.json deleted file mode 100644 index 38e021b2..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/task.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "id": "a4789e5d-f6e8-431f-add9-379d640a883c", - "name": "TerraformInstaller", - "friendlyName": "Terraform tool installer", - "description": "Find in cache or download a specific version of Terraform and prepend it to the PATH", - "author": "Microsoft Corporation", - "helpMarkDown": "[Learn more about this task](https://aka.ms/AAf1a0p)", - "category": "Tool", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "1", - "Minor": "216", - "Patch": "0" - }, - "instanceNameFormat": "Install Terraform $(terraformVersion)", - "inputs": [ - { - "name": "terraformVersion", - "type": "string", - "label": "Version", - "defaultValue": "latest", - "required": true, - "helpMarkDown": "The version of Terraform which should be installed on the agent if not already present" - } - ], - "execution": { - "Node10": { - "target": "src/index.js" - },"Node16": { - "target": "src/index.js" - },"Node20_1": { - "target": "src/index.js" - } - }, - "outputVariables": [ - { - "name": "terraformLocation", - "description": "The location of the terraform binary that was installed on the agent." - } - ], - "messages": { - "VerifyTerraformInstallation": "Verifying Terraform installation...", - "InputVersionNotValidSemanticVersion": "Input version %s is not a valid semantic version", - "TerraformNotFoundInFolder": "Terraform executable not found in path %s", - "OperatingSystemNotSupported": "Operating system %s is not supported", - "ArchitectureNotSupported": "Architecture %s is not supported", - "TerraformDownloadFailed": "Failed to download Terraform from url %s. Error %s", - "TerraformVersionNotFound": "Unable to get latest version: %s defaulting to 1.0.8", - "GettingLatestTerraformVersion": "Getting latest Terraform version." - } -} diff --git a/Tasks/TerraformInstaller/TerraformInstallerV1/tsconfig.json b/Tasks/TerraformInstaller/TerraformInstallerV1/tsconfig.json deleted file mode 100644 index 875bb90c..00000000 --- a/Tasks/TerraformInstaller/TerraformInstallerV1/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "commonjs" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/README.md b/Tasks/TerraformTask/TerraformTaskV1/README.md deleted file mode 100644 index cde3fde0..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# Terraform : Provision infrastructure on Azure, Amazon Web Services(AWS) and Google Cloud Platform(GCP) using the terraform command-line - - -## Overview - -This task enables running Terraform commands as part of Azure Build and Release Pipelines. It supports the following Terraform commands -- init -- validate -- plan -- apply -- destroy - -The following providers are currently supported: -- AzureRM -- Amazon Web Services -- Google Cloud Platform - - -## Contact Information - -Please report a problem at [Developer Community Forum](https://developercommunity.visualstudio.com/spaces/21/index.html) if you are facing problems in making this task work. You can also share feedback about the task like, what more functionality should be added to the task, what other tasks you would like to have, at the same place. - - -## Pre-requisites for the task - - -The only pre-requisite for the task is that Terraform must be installed on the Azure Pipelines build agent. If you want an exact version of Terraform on the agent then you can use the [Terraform tool tnstaller task](https://aka.ms/AAf1a0p) - - -## Parameters of the task - -- **Display name\*:** Provide a name to identify the task among others in your pipeline. - -- **Provider\*:** Select the provider in which your resources will be managed by Terraform. Currently, the following providers are supported: - - azurerm - - aws - - gcp - -- **Command\*:** Select the terraform command to execute. Currently, the following commands are supported: - - init - - validate - - plan - - apply - - destroy - -- **Configuration directory\*:** Select the directory that contains all the relevant terraform config (.tf) files. The task intends to use Terraform to build infrastructure on one provider at a time. So, all the config files in the configuration directory together should not specify more than one provider. - -- **Additional command arguments\*:** Provide any additional arguments for the selected command either as key-value pairs(-key=value) or as command line flags(-flag). Multiple options can also be provided delimited by spaces(-key1=value1 -key2=value2 -flag1 -flag2). - -Examples: - - -out=tfplan (for terraform plan) - - tfplan -auto-approve (for terraform apply) - -Options specific to **terraform init** command - -- Options specific to **AzureRM backend configuration** - - **Azure subscription\*:** Select the Azure subscription to use for AzureRM backend configuration - - **Resource group\*:** Select the name of the resource group in which you want to store the terraform remote state file - - **Storage account\*:** Select the name of the storage account belonging to the selected resource group in which you want to store the terrafor remote state file - - **Container\*:** Select the name of the Azure Blob container belonging to the storage account in which you want to store the terrafor remote state file - - **Key\*:** Specify the relative path to the state file inside the selected container. For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input "tf/terraform.tfstate" - -- Options specific to **Amazon Web Services(AWS) backend configuration** - - **Amazon Web Services connection\*:** Select the AWS connection to use for AWS backend configuration - - **Bucket\*:** Select the name of the Amazon S3 bucket in which you want to store the terraform remote state file - - **Key\*:** Specify the relative path to the state file inside the selected S3 bucket. For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input "tf/terraform.tfstate" - -- Options specific to **Google Cloud Platform(GCP) backend configuration** - - **Google Cloud Platform connection\*:** Select the GCP connection to use for GCP backend configuration - - **Bucket\*:** Select the name of the GCP storage bucket in which you want to store the terraform remote state file - - **Prefix of state file:** Specify the relative path to the state file inside the GCP bucket. For example, if you give the input as "terraform", then the state file, named default.tfstate, will be stored inside an object called terraform. - -Options specific to **terraform plan, apply and destroy** commands - -- **Azure subscription (only if "azurerm" provider is selected)\*:** Select the AzureRM subscription to use for managing the resources used by the plan, apply and destroy commands -- **Amazon Web Services connection (only if "aws" provider is selected)\*:** Select the AWS connection to use for managing the resources used by the plan, apply and destroy commands -- **Google Cloud Platform connection (only if "gcp" provider is selected)\*:** Select the GCP connection to use for managing the resources used by the plan, apply and destroy commands - -## Output Variables -* **changesPresent:** This varaible is set to true if the plan command finds changes to apply. Can be used by subsequent tasks. Give the producing task a reference name. Then, in a downstream step, you can use the form $(\.changesPresent) to refer to it. - -* **Terraform plan json file path:** This variable refers to the location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'. -* **Terraform output variables json file path:** The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'apply'. diff --git a/Tasks/TerraformTask/TerraformTaskV1/Strings/resources.resjson/en-US/resources.resjson b/Tasks/TerraformTask/TerraformTaskV1/Strings/resources.resjson/en-US/resources.resjson deleted file mode 100644 index 5b0f6679..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Strings/resources.resjson/en-US/resources.resjson +++ /dev/null @@ -1,47 +0,0 @@ -{ - "loc.friendlyName": "Terraform", - "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/AAf1a0u)", - "loc.description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", - "loc.instanceNameFormat": "Terraform : $(provider)", - "loc.group.displayName.backendAzureRm": "AzureRM backend configuration", - "loc.group.displayName.backendAWS": "Amazon Web Services(AWS) backend configuration", - "loc.group.displayName.backendGCP": "Google Cloud Platform(GCP) backend configuration", - "loc.input.label.provider": "Provider", - "loc.input.help.provider": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", - "loc.input.label.command": "Command", - "loc.input.help.command": "The terraform command to execute.", - "loc.input.label.workingDirectory": "Configuration directory", - "loc.input.help.workingDirectory": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", - "loc.input.label.commandOptions": "Additional command arguments", - "loc.input.help.commandOptions": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", - "loc.input.label.environmentServiceNameAzureRM": "Azure subscription", - "loc.input.help.environmentServiceNameAzureRM": "Select an Azure Resource Manager subscription for the deployment", - "loc.input.label.environmentServiceNameAWS": "Amazon Web Services connection", - "loc.input.help.environmentServiceNameAWS": "Select an Amazon Web Services connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "loc.input.label.environmentServiceNameGCP": "Google Cloud Platform connection", - "loc.input.help.environmentServiceNameGCP": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendServiceArm": "Azure subscription", - "loc.input.help.backendServiceArm": "Azure resource manager subscription for the terraform backend configuration", - "loc.input.label.backendAzureRmResourceGroupName": "Resource group", - "loc.input.help.backendAzureRmResourceGroupName": "The name of the resource group which contains the storage account selected below.", - "loc.input.label.backendAzureRmStorageAccountName": "Storage account", - "loc.input.help.backendAzureRmStorageAccountName": "The name of the storage account which contains the Azure Blob container selected below.", - "loc.input.label.backendAzureRmContainerName": "Container", - "loc.input.help.backendAzureRmContainerName": "The name of the Azure Blob container in which to store the Terraform remote state file.", - "loc.input.label.backendAzureRmKey": "Key", - "loc.input.help.backendAzureRmKey": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", - "loc.input.label.backendServiceAWS": "Amazon Web Services connection", - "loc.input.help.backendServiceAWS": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendAWSBucketName": "Bucket", - "loc.input.help.backendAWSBucketName": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", - "loc.input.label.backendAWSKey": "Key", - "loc.input.help.backendAWSKey": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", - "loc.input.label.backendServiceGCP": "Google Cloud Platform connection", - "loc.input.help.backendServiceGCP": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendGCPBucketName": "Bucket", - "loc.input.help.backendGCPBucketName": "The name of the GCP storage bucket for storing the Terraform remote state file.", - "loc.input.label.backendGCPPrefix": "Prefix of state file", - "loc.input.help.backendGCPPrefix": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "loc.messages.TerraformToolNotFound": "Failed to find terraform tool in paths", - "loc.messages.TerraformPlanFailed": "Terraform Plan failed with exit code: %s" -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index 3ed267cb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 92731601..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index 62065c2b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 3440ed40..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index be057f7e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 2e3608c3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 706d4483..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 2c6c08ee..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index d629baa1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 63ee27e9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index 180fe9cb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 37f620ca..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index 3a734e84..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 1e943985..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 898c5ba2..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 67da4c1d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 34087fdb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index b006d676..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index 4801903b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index d481a3cf..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index bf07e7de..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index d264c21a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index e9fcc79e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 4acbc7c6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 03e88f81..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 321e48ed..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index aadc6293..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 6fc7b499..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index c0b9668c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index b2b39cfb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index e9c17e68..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 7346c224..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 6914c6d3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index c608083c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 2de65535..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index b3b6c2b1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index db2b4532..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index a8b0a0bd..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 225ce264..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 5d605c3f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 31025690..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 5e8130ef..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index 50a305c5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index bd7d3f8a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 3858407c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index ff5551fa..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 76dfd68a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 6806eb89..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index e26084b3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index 3fb4c2b1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index ecb87946..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index a94c3381..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index f890dbca..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts deleted file mode 100644 index add6a6eb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 3793391c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 0cb83317..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 8523a416..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index 6c3d941d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=arm_subscription_id=DummmySubscriptionId -backend-config=arm_tenant_id=DummyTenantId -backend-config=arm_client_id=DummyServicePrincipalId -backend-config=arm_client_secret=DummyServicePrincipalKey": { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts deleted file mode 100644 index 4371d3cc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=arm_subscription_id=DummmySubscriptionId -backend-config=arm_tenant_id=DummyTenantId -backend-config=arm_client_id=DummyServicePrincipalId -backend-config=arm_client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 17a2a463..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index b6cff097..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=arm_subscription_id=DummmySubscriptionId -backend-config=arm_tenant_id=DummyTenantId -backend-config=arm_client_id=DummyServicePrincipalId -backend-config=arm_client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 44a4b635..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 2b4ece0f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=arm_subscription_id=DummmySubscriptionId -backend-config=arm_tenant_id=DummyTenantId -backend-config=arm_client_id=DummyServicePrincipalId -backend-config=arm_client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 76dd0ca1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index 6a1e4001..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 16c25d97..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts deleted file mode 100644 index 543cc6de..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 59da6103..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index f9f6873d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 79244a86..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 89a51574..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index bf0e7984..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/L0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/L0.ts deleted file mode 100644 index 377553fb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/L0.ts +++ /dev/null @@ -1,1215 +0,0 @@ -import * as assert from 'assert'; -import * as ttm from 'azure-pipelines-task-lib/mock-test'; -import * as path from 'path'; - -describe('Terraform Test Suite', () => { - - before(() => {}); - - after(() => {}); - - /* terraform init tests */ - - it('azure init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform validate tests */ - - it('azure validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform plan tests */ - - it('azure plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzurePlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSPlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPPlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform apply tests */ - - it('azure apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform destroy tests */ - - it('azure destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* test for multiple providers */ - - it('warnIfMultipleProviders should not warn for single provider', (done: MochaDone) => { - let tp = path.join(__dirname, './MultipleProviderTests/SingleProviderNoWarning.js'); - let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); - - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - - done(); - } catch(error) { - done(error); - } - }); - - it('warnIfMultipleProviders should warn correctly for multiple providers', (done: MochaDone) => { - let tp = path.join(__dirname, './MultipleProviderTests/MultipleProviderWarning.js'); - let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); - - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 1, 'should have one warning'); - assert(tr.createdWarningIssue('Multiple provider blocks specified in the .tf files in the current working directory.'), 'Should have created warning: Multiple provider blocks specified in the .tf files in the current working drectory.'); - - done(); - } catch(error) { - done(error); - } - }); - - /* test for compareVersions method of BaseTerraformCommandHandler class */ - - it('compareVersions should compare two versions correctly', (done: MochaDone) => { - let tp = path.join(__dirname, './L0CompareVersions.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.stdOutContained('compareVersions("0.20.7", "0.20.8") should have been -1') , 'Should have printed: compareVersions("0.20.7", "0.20.8") should have been -1'+tr.stdout); - assert(tr.stdOutContained('compareVersions("0.20.9", "0.20.8") should have been 1') , 'Should have printed: compareVersions("0.20.9", "0.20.8") should have been 1'); - assert(tr.stdOutContained('compareVersions("0.2.9", "0.2.9") should have been 0') , 'Should have printed: compareVersions("0.2.9", "0.2.9") should have been 0'); - assert(tr.stdOutContained('compareVersions("0.20.9", "0.20.09") should have been 0') , 'Should have printed: compareVersions("0.20.9", "0.20.09") should have been 0'); - assert(tr.stdOutContained('compareVersions("0.21.9", "0.20.9") should have been 1') , 'Should have printed: compareVersions("0.21.9", "0.20.9") should have been 1'); - assert(tr.stdOutContained('compareVersions("1.20.10", "0.20.11") should have been 1') , 'Should have printed: compareVersions("1.20.10", "0.20.11") should have been 1'); - - done(); - } catch(error) { - done(error); - } - }); - -}); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts deleted file mode 100644 index 12e01c99..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'MultipleProviderWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarning.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarning.ts deleted file mode 100644 index ff8c8af5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './SingleProviderNoWarningL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts deleted file mode 100644 index 5ddc2069..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'SingleProviderNoWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 53a4c2ff..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 9612c361..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index 368d11c8..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 0ab18938..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index 3e7ebb25..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index 655abe9b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index c3328bcf..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 12ea0994..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b2ceec7d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts deleted file mode 100644 index 0e22a7e1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index aaa29db7..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index 52be7867..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 90b7aaf1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index c00888f3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index def449a6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 0f613b1f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index ad8eaa47..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index ac985c87..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider gcp" - }, - "terraform plan": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 5a10e476..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index 4db0e496..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 7aa2af6c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts deleted file mode 100644 index 4b819a80..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index f68aec6e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index 699f585b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index bcc2bb57..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index 07b55455..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 53d49a0e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts deleted file mode 100644 index a77bc24b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index d00984fe..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index f47be4b5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 91ceb426..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts deleted file mode 100644 index 25eda041..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index bdf86b0c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index c3536a8d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index dc265f90..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/package-lock.json b/Tasks/TerraformTask/TerraformTaskV1/Tests/package-lock.json deleted file mode 100644 index 35edae10..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/package-lock.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" - } - }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/Tests/package.json b/Tasks/TerraformTask/TerraformTaskV1/Tests/package.json deleted file mode 100644 index c98b53b9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/Tests/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "terraform task installer test", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git" - }, - "author": "Microsoft Corporation", - "license": "MIT", - "bugs": { - "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues" - }, - "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme", - "dependencies": { - "nock": "13.2.4" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/icon.png b/Tasks/TerraformTask/TerraformTaskV1/icon.png deleted file mode 100644 index 7f0bb0f4..00000000 Binary files a/Tasks/TerraformTask/TerraformTaskV1/icon.png and /dev/null differ diff --git a/Tasks/TerraformTask/TerraformTaskV1/icon.svg b/Tasks/TerraformTask/TerraformTaskV1/icon.svg deleted file mode 100644 index d270ea55..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Tasks/TerraformTask/TerraformTaskV1/make.json b/Tasks/TerraformTask/TerraformTaskV1/make.json deleted file mode 100644 index 2c63c085..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/make.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/package-lock.json b/Tasks/TerraformTask/TerraformTaskV1/package-lock.json deleted file mode 100644 index af26ca9e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/package-lock.json +++ /dev/null @@ -1,980 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^3.3.1", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "typescript": "^4.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/azure-pipelines-task-lib": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz", - "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==", - "dependencies": { - "minimatch": "3.0.5", - "mockery": "^1.7.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mockery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "extraneous": true - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/package.json b/Tasks/TerraformTask/TerraformTaskV1/package.json deleted file mode 100644 index 563012b5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^3.3.1", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "typescript": "^4.0.0" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/src/aws-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV1/src/aws-terraform-command-handler.ts deleted file mode 100644 index 30e21371..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/src/aws-terraform-command-handler.ts +++ /dev/null @@ -1,35 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; - -export class TerraformCommandHandlerAWS extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "aws"; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('bucket', tasks.getInput("backendAWSBucketName", true)); - this.backendConfig.set('key', tasks.getInput("backendAWSKey", true)); - this.backendConfig.set('region', tasks.getEndpointAuthorizationParameter(backendServiceName, "region", true)); - this.backendConfig.set('access_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "username", true)); - this.backendConfig.set('secret_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "password", true)); - } - - public handleBackend(terraformToolRunner: ToolRunner): void { - let backendServiceName = tasks.getInput("backendServiceAWS", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public handleProvider(command: TerraformAuthorizationCommandInitializer) { - if (command.serviceProvidername) { - process.env['AWS_ACCESS_KEY_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "username", false); - process.env['AWS_SECRET_ACCESS_KEY'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "password", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/src/azure-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV1/src/azure-terraform-command-handler.ts deleted file mode 100644 index 4ddc21e2..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/src/azure-terraform-command-handler.ts +++ /dev/null @@ -1,40 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; - -export class TerraformCommandHandlerAzureRM extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "azurerm"; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('storage_account_name', tasks.getInput("backendAzureRmStorageAccountName", true)); - this.backendConfig.set('container_name', tasks.getInput("backendAzureRmContainerName", true)); - this.backendConfig.set('key', tasks.getInput("backendAzureRmKey", true)); - this.backendConfig.set('resource_group_name', tasks.getInput("backendAzureRmResourceGroupName", true)); - this.backendConfig.set('arm_subscription_id', tasks.getEndpointDataParameter(backendServiceName, "subscriptionid", true)); - this.backendConfig.set('arm_tenant_id', tasks.getEndpointAuthorizationParameter(backendServiceName, "tenantid", true)); - this.backendConfig.set('arm_client_id', tasks.getEndpointAuthorizationParameter(backendServiceName, "serviceprincipalid", true)); - this.backendConfig.set('arm_client_secret', tasks.getEndpointAuthorizationParameter(backendServiceName, "serviceprincipalkey", true)); - } - - public handleBackend(terraformToolRunner: ToolRunner): void { - let backendServiceName = tasks.getInput("backendServiceArm", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public handleProvider(command: TerraformAuthorizationCommandInitializer) { - if (command.serviceProvidername) { - process.env['ARM_SUBSCRIPTION_ID'] = tasks.getEndpointDataParameter(command.serviceProvidername, "subscriptionid", false); - process.env['ARM_TENANT_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "tenantid", false); - process.env['ARM_CLIENT_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalid", false); - process.env['ARM_CLIENT_SECRET'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalkey", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/src/base-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV1/src/base-terraform-command-handler.ts deleted file mode 100644 index 97db1fd3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/src/base-terraform-command-handler.ts +++ /dev/null @@ -1,331 +0,0 @@ -import {TerraformToolHandler, ITerraformToolHandler} from './terraform'; -import {ToolRunner, IExecOptions, IExecSyncOptions, IExecSyncResult} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformBaseCommandInitializer, TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import tasks = require('azure-pipelines-task-lib/task'); -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; -const fs = require('fs'); -const del = require('del'); - -export abstract class BaseTerraformCommandHandler { - providerName: string; - terraformToolHandler: ITerraformToolHandler; - backendConfig: Map; - - abstract handleBackend(terraformToolRunner: ToolRunner); - abstract handleProvider(command: TerraformAuthorizationCommandInitializer); - - constructor() { - this.providerName = ""; - this.terraformToolHandler = new TerraformToolHandler(tasks); - this.backendConfig = new Map(); - } - - public compareVersions(version1: string, version2: string) { - let versionNumbers1: string[] = version1.split('.'); - let versionNumbers2: string[] = version2.split('.'); - - const smallerLength = Math.min(versionNumbers1.length, versionNumbers2.length); - - let versionNumbersInt1: number[] = new Array(smallerLength); - let versionNumbersInt2: number[] = new Array(smallerLength); - - for (let i = 0; i < smallerLength; i++) { - versionNumbersInt1[i] = parseInt(versionNumbers1[i], 10); - versionNumbersInt2[i] = parseInt(versionNumbers2[i], 10); - if (versionNumbersInt1[i] > versionNumbersInt2[i]) return 1; - if (versionNumbersInt1[i] < versionNumbersInt2[i]) return -1; - } - - return versionNumbersInt1.length == versionNumbersInt2.length ? 0: (versionNumbersInt1.length < versionNumbersInt2.length ? -1 : 1); - } - - public warnIfMultipleProviders(): void { - let terraformPath; - try { - terraformPath = tasks.which("terraform", true); - } catch(err) { - throw new Error(tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = tasks.tool(terraformPath); - terraformToolRunner.arg("providers"); - let commandOutput = terraformToolRunner.execSync({ - cwd: tasks.getInput("workingDirectory") - }); - - let countProviders = ["aws", "azurerm", "google"].filter(provider => commandOutput.stdout.includes(provider)).length; - tasks.debug(countProviders.toString()); - if (countProviders > 1) { - tasks.warning("Multiple provider blocks specified in the .tf files in the current working directory."); - } - } - - public getServiceProviderNameFromProviderInput(): string { - let provider: string = tasks.getInput("provider", true); - - switch (provider) { - case "azurerm": return "AzureRM"; - case "aws" : return "AWS"; - case "gcp" : return "GCP"; - } - } - - public async init(): Promise { - let initCommand = new TerraformBaseCommandInitializer( - "init", - tasks.getInput("workingDirectory"), - tasks.getInput("commandOptions") - ); - - let terraformTool; - - terraformTool = this.terraformToolHandler.createToolRunner(initCommand); - this.handleBackend(terraformTool); - - return terraformTool.exec( { - cwd: initCommand.workingDirectory - }); - } - - protected checkIfShowCommandSupportsJsonOutput(): number { - let terraformPath; - try { - terraformPath = tasks.which("terraform", true); - } catch(err) { - throw new Error(tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = tasks.tool(terraformPath); - terraformToolRunner.arg("version"); - - let outputContents = terraformToolRunner.execSync({ - cwd: tasks.getInput("workingDirectory") - }).stdout; - - let outputLines: string[] = outputContents.split('\n'); - // First line has the format "Terraform v0.12.1" - let firstLine = outputLines[0]; - // Extract only the version information from the first line i.e. "0.12.1" - let currentVersion = firstLine.substring(11); - // Check to see if this version is greater than or equal to 0.12.0 - return this.compareVersions(currentVersion, "0.12.0"); - } - - public async onlyPlan(): Promise { - this.warnIfMultipleProviders(); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let commandOptions = tasks.getInput("commandOptions") != null ? `${tasks.getInput("commandOptions")} -detailed-exitcode`:`-detailed-exitcode` - let planCommand = new TerraformAuthorizationCommandInitializer( - "plan", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - commandOptions - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(planCommand); - this.handleProvider(planCommand); - - let result = await terraformTool.exec( { - cwd: planCommand.workingDirectory, - ignoreReturnCode: true - }); - - if (result !== 0 && result !== 2) { - throw new Error(tasks.loc("TerraformPlanFailed", result)); - } - - return result; - } - - public setOutputVariableToPlanFilePath() { - // Do terraform version to check if version is >= 0.12.0 - if (this.checkIfShowCommandSupportsJsonOutput() >= 0) { - let terraformTool; - let fileStream; - - // Do terraform plan with -out flag to output the binary plan file - const binaryPlanFilePath = path.resolve(`plan-binary-${uuidV4()}.tfplan`); - const tempFileForPlanOutput = path.resolve(`temp-plan-${uuidV4()}.txt`); - - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let commandOptions = tasks.getInput("commandOptions") != null ? `${tasks.getInput("commandOptions")} -out=${binaryPlanFilePath}`:`-out=${binaryPlanFilePath}` - let planCommand = new TerraformAuthorizationCommandInitializer( - "plan", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - commandOptions - ); - terraformTool = this.terraformToolHandler.createToolRunner(planCommand); - this.handleProvider(planCommand); - fileStream = fs.createWriteStream(tempFileForPlanOutput); - terraformTool.execSync({ - cwd: planCommand.workingDirectory, - outStream: fileStream - }); - - // Do terraform show with -json flag to output the json plan file - const jsonPlanFilePath = path.resolve(`plan-json-${uuidV4()}.json`); - const tempFileForJsonPlanOutput = path.resolve(`temp-plan-json-${uuidV4()}.json`) - let commandOutput: IExecSyncResult; - let showCommand = new TerraformBaseCommandInitializer( - "show", - tasks.getInput("workingDirectory"), - `-json ${binaryPlanFilePath}` - ); - terraformTool = this.terraformToolHandler.createToolRunner(showCommand); - fileStream = fs.createWriteStream(tempFileForJsonPlanOutput); - commandOutput = terraformTool.execSync({ - cwd: showCommand.workingDirectory, - outStream: fileStream - }); - - // Write command output to the json plan file - tasks.writeFile(jsonPlanFilePath, commandOutput.stdout); - // Set the output variable to the json plan file path - tasks.setVariable('jsonPlanFilePath', jsonPlanFilePath); - - // Delete all the files that are not needed any further - if (tasks.exist(binaryPlanFilePath)) { - - (async () => { - await del([binaryPlanFilePath]); - })(); - } - - if (tasks.exist(tempFileForPlanOutput)) { - (async () => { - await del([tempFileForPlanOutput]); - })(); - } - - if (tasks.exist(tempFileForJsonPlanOutput)) { - (async () => { - await del([tempFileForJsonPlanOutput]); - })(); - } - - } else { - tasks.warning("Terraform show command does not support -json flag for terraform versions older than 0.12.0. The output variable named 'jsonPlanFilePath' was not set.") - } - } - - public async plan(): Promise { - let exitCode = await this.onlyPlan(); - tasks.setVariable('changesPresent', (exitCode === 2).toString(), false, true); - this.setOutputVariableToPlanFilePath(); - - return Promise.resolve(0); - } - - public async onlyApply(): Promise { - let terraformTool; - this.warnIfMultipleProviders(); - let validateCommand = new TerraformBaseCommandInitializer("validate", tasks.getInput("workingDirectory"), ''); - terraformTool = this.terraformToolHandler.createToolRunner(validateCommand); - await terraformTool.exec( { - cwd: validateCommand.workingDirectory - }); - - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let autoApprove: string = '-auto-approve'; - let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; - - if (additionalArgs.includes(autoApprove) === false) { - additionalArgs = `${autoApprove} ${additionalArgs}`; - } - - let applyCommand = new TerraformAuthorizationCommandInitializer( - "apply", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - additionalArgs - ); - - terraformTool = this.terraformToolHandler.createToolRunner(applyCommand); - this.handleProvider(applyCommand); - - return terraformTool.exec( { - cwd: applyCommand.workingDirectory - }); - } - - public setOutputVariableToJsonOutputVariablesFilesPath() { - let additionalArgs: string = `-json` - let outputCommand = new TerraformBaseCommandInitializer( - "output", - tasks.getInput("workingDirectory"), - additionalArgs - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(outputCommand); - - const jsonOutputVariablesFilePath = path.resolve(`output-${uuidV4()}.json`); - const tempFileForJsonOutputVariables = path.resolve(`temp-output-${uuidV4()}.json`); - const fileStream = fs.createWriteStream(tempFileForJsonOutputVariables); - let commandOutput = terraformTool.execSync({ - cwd: outputCommand.workingDirectory, - outStream: fileStream - }); - - tasks.writeFile(jsonOutputVariablesFilePath, commandOutput.stdout); - tasks.setVariable('jsonOutputVariablesPath', jsonOutputVariablesFilePath); - - // Delete the temp file as it is not needed further - if (tasks.exist(tempFileForJsonOutputVariables)) { - (async () => { - await del([tempFileForJsonOutputVariables]); - })(); - } - } - - public async apply(): Promise { - await this.onlyApply(); - this.setOutputVariableToJsonOutputVariablesFilesPath(); - - return Promise.resolve(0); - }; - - public async destroy(): Promise { - this.warnIfMultipleProviders(); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let autoApprove: string = '-auto-approve'; - let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; - - if (additionalArgs.includes(autoApprove) === false) { - additionalArgs = `${autoApprove} ${additionalArgs}`; - } - - let destroyCommand = new TerraformAuthorizationCommandInitializer( - "destroy", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - additionalArgs - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(destroyCommand); - this.handleProvider(destroyCommand); - - return terraformTool.exec( { - cwd: destroyCommand.workingDirectory - }); - }; - - public async validate(): Promise { - let validateCommand = new TerraformBaseCommandInitializer( - "validate", - tasks.getInput("workingDirectory"), - tasks.getInput("commandOptions") - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(validateCommand); - - return terraformTool.exec({ - cwd: validateCommand.workingDirectory - }); - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/src/gcp-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV1/src/gcp-terraform-command-handler.ts deleted file mode 100644 index e757db8c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/src/gcp-terraform-command-handler.ts +++ /dev/null @@ -1,55 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; - -export class TerraformCommandHandlerGCP extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "gcp"; - } - - private getJsonKeyFilePath(serviceName: string) { - // Get credentials for json file - const jsonKeyFilePath = path.resolve(`credentials-${uuidV4()}.json`); - - let clientEmail = tasks.getEndpointAuthorizationParameter(serviceName, "Issuer", false); - let tokenUri = tasks.getEndpointAuthorizationParameter(serviceName, "Audience", false); - let privateKey = tasks.getEndpointAuthorizationParameter(serviceName, "PrivateKey", false); - - // Create json string and write it to the file - let jsonCredsString = `{"type": "service_account", "private_key": "${privateKey}", "client_email": "${clientEmail}", "token_uri": "${tokenUri}"}` - tasks.writeFile(jsonKeyFilePath, jsonCredsString); - - return jsonKeyFilePath; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('bucket', tasks.getInput("backendGCPBucketName", true)); - this.backendConfig.set('prefix', tasks.getInput("backendGCPPrefix", false)); - - let jsonKeyFilePath = this.getJsonKeyFilePath(backendServiceName); - - this.backendConfig.set('credentials', jsonKeyFilePath); - } - - public handleBackend(terraformToolRunner: ToolRunner): void { - let backendServiceName = tasks.getInput("backendServiceGCP", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public handleProvider(command: TerraformAuthorizationCommandInitializer) { - if (command.serviceProvidername) { - let jsonKeyFilePath = this.getJsonKeyFilePath(command.serviceProvidername); - - process.env['GOOGLE_CREDENTIALS'] = `${jsonKeyFilePath}`; - process.env['GOOGLE_PROJECT'] = tasks.getEndpointDataParameter(command.serviceProvidername, "project", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/src/parent-handler.ts b/Tasks/TerraformTask/TerraformTaskV1/src/parent-handler.ts deleted file mode 100644 index 5f94bba5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/src/parent-handler.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { BaseTerraformCommandHandler } from './base-terraform-command-handler'; -import { TerraformCommandHandlerAzureRM } from './azure-terraform-command-handler'; -import { TerraformCommandHandlerAWS } from './aws-terraform-command-handler'; -import { TerraformCommandHandlerGCP } from './gcp-terraform-command-handler'; - -export interface IParentCommandHandler { - execute(providerName: string, command: string): Promise; -} - -export class ParentCommandHandler implements IParentCommandHandler { - public async execute(providerName: string, command: string): Promise { - // Create corresponding command handler according to provider name - let provider: BaseTerraformCommandHandler; - - switch(providerName) { - case "azurerm": - provider = new TerraformCommandHandlerAzureRM(); - break; - - case "aws": - provider = new TerraformCommandHandlerAWS(); - break; - - case "gcp": - provider = new TerraformCommandHandlerGCP(); - break; - } - - // Run the corrresponding command according to command name - return await provider[command](); - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/src/terraform-commands.ts b/Tasks/TerraformTask/TerraformTaskV1/src/terraform-commands.ts deleted file mode 100644 index d95b2a23..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/src/terraform-commands.ts +++ /dev/null @@ -1,29 +0,0 @@ -export class TerraformBaseCommandInitializer { - public readonly name: string; - public readonly workingDirectory: string; - public readonly additionalArgs: string | undefined; - - constructor( - name: string, - workingDirectory: string, - additionalArgs?: string | undefined - ) { - this.name = name; - this.workingDirectory = workingDirectory; - this.additionalArgs = additionalArgs; - } -} - -export class TerraformAuthorizationCommandInitializer extends TerraformBaseCommandInitializer { - readonly serviceProvidername: string; - - constructor( - name: string, - workingDirectory: string, - serviceProvidername: string, - additionalArgs?: string | undefined - ) { - super(name, workingDirectory, additionalArgs); - this.serviceProvidername = serviceProvidername; - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV1/src/terraform.ts b/Tasks/TerraformTask/TerraformTaskV1/src/terraform.ts deleted file mode 100644 index 59ea03a6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/src/terraform.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner' -import { TerraformBaseCommandInitializer } from './terraform-commands' - -export interface ITerraformToolHandler { - createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner; -} - -export class TerraformToolHandler implements ITerraformToolHandler { - private readonly tasks: any; - - constructor(tasks: any) { - this.tasks = tasks; - } - - public createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner { - let terraformPath; - try { - terraformPath = this.tasks.which("terraform", true); - } catch(err) { - throw new Error(this.tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = this.tasks.tool(terraformPath); - if (command) { - terraformToolRunner.arg(command.name); - if (command.additionalArgs) { - terraformToolRunner.line(command.additionalArgs); - } - } - - return terraformToolRunner; - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/task.json b/Tasks/TerraformTask/TerraformTaskV1/task.json deleted file mode 100644 index aaee2c78..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/task.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "id": "FE504ACC-6115-40CB-89FF-191386B5E7BF", - "name": "TerraformTaskV1", - "friendlyName": "Terraform", - "description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", - "author": "Microsoft Corporation", - "helpMarkDown": "[Learn more about this task](https://aka.ms/AAf1a0u)", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "0", - "Minor": "202", - "Patch": "0" - }, - "instanceNameFormat": "Terraform : $(provider)", - "execution": { - "Node10": { - "target": "src/index.js" - } - }, - "groups": [ - { - "name": "backendAzureRm", - "displayName": "AzureRM backend configuration", - "isExpanded": true, - "visibleRule": "provider = azurerm && command = init" - }, - { - "name": "backendAWS", - "displayName": "Amazon Web Services(AWS) backend configuration", - "isExpanded": true, - "visibleRule": "provider = aws && command = init" - }, - { - "name": "backendGCP", - "displayName": "Google Cloud Platform(GCP) backend configuration", - "isExpanded": true, - "visibleRule": "provider = gcp && command = init" - } - ], - "inputs": [{ - "name": "provider", - "type": "picklist", - "label": "Provider", - "defaultValue": "azurerm", - "required": true, - "helpMarkDown": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", - "options": { - "azurerm": "azurerm", - "aws": "aws", - "gcp": "gcp" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "command", - "type": "pickList", - "label": "Command", - "defaultValue": "init", - "required": true, - "helpMarkDown": "The terraform command to execute.", - "options": { - "init": "init", - "validate": "validate", - "plan": "plan", - "apply": "validate and apply", - "destroy": "destroy" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "workingDirectory", - "type": "filePath", - "label": "Configuration directory", - "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", - "required": false - }, - { - "name": "commandOptions", - "type": "string", - "label": "Additional command arguments", - "helpMarkDown": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", - "required": false - }, - { - "name": "environmentServiceNameAzureRM", - "type": "connectedService:AzureRM", - "label": "Azure subscription", - "required": true, - "visibleRule": "provider = azurerm && command != init && command != validate", - "helpMarkDown": "Select an Azure Resource Manager subscription for the deployment" - }, - { - "name": "environmentServiceNameAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "Amazon Web Services connection", - "required": true, - "visibleRule": "provider = aws && command != init && command != validate", - "helpMarkDown": "Select an Amazon Web Services connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button." - }, - { - "name": "environmentServiceNameGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "Google Cloud Platform connection", - "required": true, - "visibleRule": "provider = gcp && command != init && command != validate", - "helpMarkDown": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button." - }, - { - "name": "backendServiceArm", - "type": "connectedService:AzureRM", - "label": "Azure subscription", - "required": true, - "helpMarkDown": "Azure resource manager subscription for the terraform backend configuration", - "groupName": "backendAzureRm" - }, - { - "name": "backendAzureRmResourceGroupName", - "type": "pickList", - "label": "Resource group", - "required": true, - "helpMarkDown": "The name of the resource group which contains the storage account selected below.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmStorageAccountName", - "type": "pickList", - "label": "Storage account", - "required": true, - "helpMarkDown": "The name of the storage account which contains the Azure Blob container selected below.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmContainerName", - "type": "pickList", - "label": "Container", - "required": true, - "helpMarkDown": "The name of the Azure Blob container in which to store the Terraform remote state file.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmKey", - "type": "string", - "label": "Key", - "required": true, - "helpMarkDown": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", - "groupName": "backendAzureRm" - }, - { - "name": "backendServiceAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "Amazon Web Services connection", - "required": true, - "helpMarkDown": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "groupName": "backendAWS" - }, - { - "name": "backendAWSBucketName", - "type": "pickList", - "label": "Bucket", - "required": true, - "helpMarkDown": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", - "groupName": "backendAWS", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAWSKey", - "type": "string", - "label": "Key", - "required": true, - "helpMarkDown": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", - "groupName": "backendAWS" - }, - { - "name": "backendServiceGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "Google Cloud Platform connection", - "required": true, - "helpMarkDown": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "groupName": "backendGCP" - }, - { - "name": "backendGCPBucketName", - "type": "pickList", - "label": "Bucket", - "required": true, - "helpMarkDown": "The name of the GCP storage bucket for storing the Terraform remote state file.", - "groupName": "backendGCP", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendGCPPrefix", - "type": "string", - "label": "Prefix of state file", - "required": false, - "helpMarkDown": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "groupName": "backendGCP" - } - ], - "dataSourceBindings": [ - { - "target": "backendAzureRmResourceGroupName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourcegroups?api-version=2019-05-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmStorageAccountName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmContainerName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$(backendAzureRmStorageAccountName)/blobServices/default/containers?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAWSBucketName", - "endpointId": "$(backendServiceAWS)", - "dataSourceName": "AWS" - }, - { - "target": "backendGCPBucketName", - "endpointId": "$(backendServiceGCP)", - "dataSourceName": "GCP" - } - ], - "outputVariables": [ - { - "name": "jsonPlanFilePath", - "description": "The location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." - }, - { - "name": "jsonOutputVariablesPath", - "description": "The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'apply'." - }, - { - "name": "changesPresent", - "description": "A boolean indicating if the terraform plan found any changes to apply." - } - ], - "messages": { - "TerraformToolNotFound": "Failed to find terraform tool in paths", - "TerraformPlanFailed": "Terraform Plan failed with exit code: %s" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/task.loc.json b/Tasks/TerraformTask/TerraformTaskV1/task.loc.json deleted file mode 100644 index c3805e7c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/task.loc.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "id": "FE504ACC-6115-40CB-89FF-191386B5E7BF", - "name": "TerraformTaskV1", - "friendlyName": "ms-resource:loc.friendlyName", - "description": "ms-resource:loc.description", - "author": "Microsoft Corporation", - "helpMarkDown": "ms-resource:loc.helpMarkDown", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "0", - "Minor": "202", - "Patch": "0" - }, - "instanceNameFormat": "ms-resource:loc.instanceNameFormat", - "execution": { - "Node10": { - "target": "src/index.js" - } - }, - "groups": [ - { - "name": "backendAzureRm", - "displayName": "ms-resource:loc.group.displayName.backendAzureRm", - "isExpanded": true, - "visibleRule": "provider = azurerm && command = init" - }, - { - "name": "backendAWS", - "displayName": "ms-resource:loc.group.displayName.backendAWS", - "isExpanded": true, - "visibleRule": "provider = aws && command = init" - }, - { - "name": "backendGCP", - "displayName": "ms-resource:loc.group.displayName.backendGCP", - "isExpanded": true, - "visibleRule": "provider = gcp && command = init" - } - ], - "inputs": [ - { - "name": "provider", - "type": "picklist", - "label": "ms-resource:loc.input.label.provider", - "defaultValue": "azurerm", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.provider", - "options": { - "azurerm": "azurerm", - "aws": "aws", - "gcp": "gcp" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "command", - "type": "pickList", - "label": "ms-resource:loc.input.label.command", - "defaultValue": "init", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.command", - "options": { - "init": "init", - "validate": "validate", - "plan": "plan", - "apply": "validate and apply", - "destroy": "destroy" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "workingDirectory", - "type": "filePath", - "label": "ms-resource:loc.input.label.workingDirectory", - "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "ms-resource:loc.input.help.workingDirectory", - "required": false - }, - { - "name": "commandOptions", - "type": "string", - "label": "ms-resource:loc.input.label.commandOptions", - "helpMarkDown": "ms-resource:loc.input.help.commandOptions", - "required": false - }, - { - "name": "environmentServiceNameAzureRM", - "type": "connectedService:AzureRM", - "label": "ms-resource:loc.input.label.environmentServiceNameAzureRM", - "required": true, - "visibleRule": "provider = azurerm && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameAzureRM" - }, - { - "name": "environmentServiceNameAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "ms-resource:loc.input.label.environmentServiceNameAWS", - "required": true, - "visibleRule": "provider = aws && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameAWS" - }, - { - "name": "environmentServiceNameGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "ms-resource:loc.input.label.environmentServiceNameGCP", - "required": true, - "visibleRule": "provider = gcp && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameGCP" - }, - { - "name": "backendServiceArm", - "type": "connectedService:AzureRM", - "label": "ms-resource:loc.input.label.backendServiceArm", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceArm", - "groupName": "backendAzureRm" - }, - { - "name": "backendAzureRmResourceGroupName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmResourceGroupName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmResourceGroupName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmStorageAccountName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmStorageAccountName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmStorageAccountName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmContainerName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmContainerName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmContainerName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmKey", - "type": "string", - "label": "ms-resource:loc.input.label.backendAzureRmKey", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmKey", - "groupName": "backendAzureRm" - }, - { - "name": "backendServiceAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "ms-resource:loc.input.label.backendServiceAWS", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceAWS", - "groupName": "backendAWS" - }, - { - "name": "backendAWSBucketName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAWSBucketName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAWSBucketName", - "groupName": "backendAWS", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAWSKey", - "type": "string", - "label": "ms-resource:loc.input.label.backendAWSKey", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAWSKey", - "groupName": "backendAWS" - }, - { - "name": "backendServiceGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "ms-resource:loc.input.label.backendServiceGCP", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceGCP", - "groupName": "backendGCP" - }, - { - "name": "backendGCPBucketName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendGCPBucketName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendGCPBucketName", - "groupName": "backendGCP", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendGCPPrefix", - "type": "string", - "label": "ms-resource:loc.input.label.backendGCPPrefix", - "required": false, - "helpMarkDown": "ms-resource:loc.input.help.backendGCPPrefix", - "groupName": "backendGCP" - } - ], - "dataSourceBindings": [ - { - "target": "backendAzureRmResourceGroupName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourcegroups?api-version=2019-05-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmStorageAccountName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmContainerName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$(backendAzureRmStorageAccountName)/blobServices/default/containers?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAWSBucketName", - "endpointId": "$(backendServiceAWS)", - "dataSourceName": "AWS" - }, - { - "target": "backendGCPBucketName", - "endpointId": "$(backendServiceGCP)", - "dataSourceName": "GCP" - } - ], - "outputVariables": [ - { - "name": "jsonPlanFilePath", - "description": "The location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." - }, - { - "name": "jsonOutputVariablesPath", - "description": "The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'apply'." - }, - { - "name": "changesPresent", - "description": "A boolean indicating if the terraform plan found any changes to apply." - } - ], - "messages": { - "TerraformToolNotFound": "ms-resource:loc.messages.TerraformToolNotFound", - "TerraformPlanFailed": "ms-resource:loc.messages.TerraformPlanFailed" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV1/tsconfig.json b/Tasks/TerraformTask/TerraformTaskV1/tsconfig.json deleted file mode 100644 index 9ad09ffe..00000000 --- a/Tasks/TerraformTask/TerraformTaskV1/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "commonjs", - "skipLibCheck": true - }, - "exclude": ["Tests"] -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/README.md b/Tasks/TerraformTask/TerraformTaskV2/README.md deleted file mode 100644 index 06d15fe0..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# Terraform : Provision infrastructure on Azure, Amazon Web Services(AWS) and Google Cloud Platform(GCP) using the terraform command-line - - -## Overview - -This task enables running Terraform commands as part of Azure Build and Release Pipelines. It supports the following Terraform commands -- init -- validate -- plan -- apply -- destroy - -The following providers are currently supported: -- AzureRM -- Amazon Web Services -- Google Cloud Platform - - -## Contact Information - -Please report a problem at [Developer Community Forum](https://developercommunity.visualstudio.com/spaces/21/index.html) if you are facing problems in making this task work. You can also share feedback about the task like, what more functionality should be added to the task, what other tasks you would like to have, at the same place. - - -## Pre-requisites for the task - - -The only pre-requisite for the task is that Terraform must be installed on the Azure Pipelines build agent. If you want an exact version of Terraform on the agent then you can use the [Terraform tool installer task](https://aka.ms/AAf1a0p). Terraform Task V2 only supports `terraform >= 0.12`. - - -## Parameters of the task - -- **Display name\*:** Provide a name to identify the task among others in your pipeline. - -- **Provider\*:** Select the provider in which your resources will be managed by Terraform. Currently, the following providers are supported: - - azurerm - - aws - - gcp - -- **Command\*:** Select the terraform command to execute. Currently, the following commands are supported: - - init - - validate - - plan - - apply - - destroy - -- **Configuration directory\*:** Select the directory that contains all the relevant terraform config (.tf) files. The task intends to use Terraform to build infrastructure on one provider at a time. So, all the config files in the configuration directory together should not specify more than one provider. - -- **Additional command arguments\*:** Provide any additional arguments for the selected command either as key-value pairs(-key=value) or as command line flags(-flag). Multiple options can also be provided delimited by spaces(-key1=value1 -key2=value2 -flag1 -flag2). - -Examples: - - -out=tfplan (for terraform plan) - - tfplan -auto-approve (for terraform apply) - -Options specific to **terraform init** command - -- Options specific to **AzureRM backend configuration** - - **Azure subscription\*:** Select the Azure subscription to use for AzureRM backend configuration - - **Resource group\*:** Select the name of the resource group in which you want to store the terraform remote state file - - **Storage account\*:** Select the name of the storage account belonging to the selected resource group in which you want to store the terrafor remote state file - - **Container\*:** Select the name of the Azure Blob container belonging to the storage account in which you want to store the terrafor remote state file - - **Key\*:** Specify the relative path to the state file inside the selected container. For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input "tf/terraform.tfstate" - -- Options specific to **Amazon Web Services(AWS) backend configuration** - - **Amazon Web Services connection\*:** Select the AWS connection to use for AWS backend configuration - - **Bucket\*:** Select the name of the Amazon S3 bucket in which you want to store the terraform remote state file - - **Key\*:** Specify the relative path to the state file inside the selected S3 bucket. For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input "tf/terraform.tfstate" - -- Options specific to **Google Cloud Platform(GCP) backend configuration** - - **Google Cloud Platform connection\*:** Select the GCP connection to use for GCP backend configuration - - **Bucket\*:** Select the name of the GCP storage bucket in which you want to store the terraform remote state file - - **Prefix of state file:** Specify the relative path to the state file inside the GCP bucket. For example, if you give the input as "terraform", then the state file, named default.tfstate, will be stored inside an object called terraform. - -Options specific to **terraform plan, apply and destroy** commands - -- **Azure subscription (only if "azurerm" provider is selected)\*:** Select the AzureRM subscription to use for managing the resources used by the plan, apply and destroy commands -- **Amazon Web Services connection (only if "aws" provider is selected)\*:** Select the AWS connection to use for managing the resources used by the plan, apply and destroy commands -- **Google Cloud Platform connection (only if "gcp" provider is selected)\*:** Select the GCP connection to use for managing the resources used by the plan, apply and destroy commands - -## Output Variables -* **changesPresent:** This varaible is set to true if the plan command finds changes to apply. Can be used by subsequent tasks. Give the producing task a reference name. Then, in a downstream step, you can use the form $(\.changesPresent) to refer to it. - -* **Terraform plan json file path:** This variable refers to the location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'. -* **Terraform output variables json file path:** The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'apply'. diff --git a/Tasks/TerraformTask/TerraformTaskV2/Strings/resources.resjson/en-US/resources.resjson b/Tasks/TerraformTask/TerraformTaskV2/Strings/resources.resjson/en-US/resources.resjson deleted file mode 100644 index b3851f34..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Strings/resources.resjson/en-US/resources.resjson +++ /dev/null @@ -1,47 +0,0 @@ -{ - "loc.friendlyName": "Terraform", - "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/AAf0uqr)", - "loc.description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", - "loc.instanceNameFormat": "Terraform : $(provider)", - "loc.group.displayName.backendAzureRm": "AzureRM backend configuration", - "loc.group.displayName.backendAWS": "Amazon Web Services(AWS) backend configuration", - "loc.group.displayName.backendGCP": "Google Cloud Platform(GCP) backend configuration", - "loc.input.label.provider": "Provider", - "loc.input.help.provider": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", - "loc.input.label.command": "Command", - "loc.input.help.command": "The terraform command to execute.", - "loc.input.label.workingDirectory": "Configuration directory", - "loc.input.help.workingDirectory": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", - "loc.input.label.commandOptions": "Additional command arguments", - "loc.input.help.commandOptions": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", - "loc.input.label.environmentServiceNameAzureRM": "Azure subscription", - "loc.input.help.environmentServiceNameAzureRM": "Select an Azure Resource Manager subscription for the deployment", - "loc.input.label.environmentServiceNameAWS": "Amazon Web Services connection", - "loc.input.help.environmentServiceNameAWS": "Select an Amazon Web Services connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "loc.input.label.environmentServiceNameGCP": "Google Cloud Platform connection", - "loc.input.help.environmentServiceNameGCP": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendServiceArm": "Azure subscription", - "loc.input.help.backendServiceArm": "Azure resource manager subscription for the terraform backend configuration", - "loc.input.label.backendAzureRmResourceGroupName": "Resource group", - "loc.input.help.backendAzureRmResourceGroupName": "The name of the resource group which contains the storage account selected below.", - "loc.input.label.backendAzureRmStorageAccountName": "Storage account", - "loc.input.help.backendAzureRmStorageAccountName": "The name of the storage account which contains the Azure Blob container selected below.", - "loc.input.label.backendAzureRmContainerName": "Container", - "loc.input.help.backendAzureRmContainerName": "The name of the Azure Blob container in which to store the Terraform remote state file.", - "loc.input.label.backendAzureRmKey": "Key", - "loc.input.help.backendAzureRmKey": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", - "loc.input.label.backendServiceAWS": "Amazon Web Services connection", - "loc.input.help.backendServiceAWS": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendAWSBucketName": "Bucket", - "loc.input.help.backendAWSBucketName": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", - "loc.input.label.backendAWSKey": "Key", - "loc.input.help.backendAWSKey": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", - "loc.input.label.backendServiceGCP": "Google Cloud Platform connection", - "loc.input.help.backendServiceGCP": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendGCPBucketName": "Bucket", - "loc.input.help.backendGCPBucketName": "The name of the GCP storage bucket for storing the Terraform remote state file.", - "loc.input.label.backendGCPPrefix": "Prefix of state file", - "loc.input.help.backendGCPPrefix": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "loc.messages.TerraformToolNotFound": "Failed to find terraform tool in paths", - "loc.messages.TerraformPlanFailed": "Terraform Plan failed with exit code: %s" -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index 3ed267cb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 92731601..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index 62065c2b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 3440ed40..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index be057f7e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 2e3608c3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 706d4483..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 2c6c08ee..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index d629baa1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 63ee27e9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index 180fe9cb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 37f620ca..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index 3a734e84..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 1e943985..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 898c5ba2..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 67da4c1d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 34087fdb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index b006d676..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index 4801903b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index d481a3cf..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index bf07e7de..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index d264c21a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index e9fcc79e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 4acbc7c6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.onlyApply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 03e88f81..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 321e48ed..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index aadc6293..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 6fc7b499..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index c0b9668c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index b2b39cfb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyApply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index e9c17e68..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 2de65535..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index b4fbae63..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index b3b6c2b1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index db2b4532..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index a8b0a0bd..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 5d8a7a50..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 31025690..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 5e8130ef..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 45698517..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 3858407c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index ff5551fa..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 76dfd68a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 6806eb89..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index ecb87946..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index f890dbca..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts deleted file mode 100644 index add6a6eb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index 833be0ef..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 7beb8d2b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 0cb83317..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 8523a416..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index b48d42c0..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index cc143336..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts deleted file mode 100644 index c58af31f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 17a2a463..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index ed812d33..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 44a4b635..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index f5980c2a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 76dd0ca1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index 6a1e4001..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 16c25d97..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts deleted file mode 100644 index 543cc6de..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 59da6103..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index f9f6873d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 79244a86..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 89a51574..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/L0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/L0.ts deleted file mode 100644 index 377553fb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/L0.ts +++ /dev/null @@ -1,1215 +0,0 @@ -import * as assert from 'assert'; -import * as ttm from 'azure-pipelines-task-lib/mock-test'; -import * as path from 'path'; - -describe('Terraform Test Suite', () => { - - before(() => {}); - - after(() => {}); - - /* terraform init tests */ - - it('azure init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform validate tests */ - - it('azure validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform plan tests */ - - it('azure plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzurePlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSPlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPPlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform apply tests */ - - it('azure apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform destroy tests */ - - it('azure destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* test for multiple providers */ - - it('warnIfMultipleProviders should not warn for single provider', (done: MochaDone) => { - let tp = path.join(__dirname, './MultipleProviderTests/SingleProviderNoWarning.js'); - let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); - - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - - done(); - } catch(error) { - done(error); - } - }); - - it('warnIfMultipleProviders should warn correctly for multiple providers', (done: MochaDone) => { - let tp = path.join(__dirname, './MultipleProviderTests/MultipleProviderWarning.js'); - let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); - - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 1, 'should have one warning'); - assert(tr.createdWarningIssue('Multiple provider blocks specified in the .tf files in the current working directory.'), 'Should have created warning: Multiple provider blocks specified in the .tf files in the current working drectory.'); - - done(); - } catch(error) { - done(error); - } - }); - - /* test for compareVersions method of BaseTerraformCommandHandler class */ - - it('compareVersions should compare two versions correctly', (done: MochaDone) => { - let tp = path.join(__dirname, './L0CompareVersions.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.stdOutContained('compareVersions("0.20.7", "0.20.8") should have been -1') , 'Should have printed: compareVersions("0.20.7", "0.20.8") should have been -1'+tr.stdout); - assert(tr.stdOutContained('compareVersions("0.20.9", "0.20.8") should have been 1') , 'Should have printed: compareVersions("0.20.9", "0.20.8") should have been 1'); - assert(tr.stdOutContained('compareVersions("0.2.9", "0.2.9") should have been 0') , 'Should have printed: compareVersions("0.2.9", "0.2.9") should have been 0'); - assert(tr.stdOutContained('compareVersions("0.20.9", "0.20.09") should have been 0') , 'Should have printed: compareVersions("0.20.9", "0.20.09") should have been 0'); - assert(tr.stdOutContained('compareVersions("0.21.9", "0.20.9") should have been 1') , 'Should have printed: compareVersions("0.21.9", "0.20.9") should have been 1'); - assert(tr.stdOutContained('compareVersions("1.20.10", "0.20.11") should have been 1') , 'Should have printed: compareVersions("1.20.10", "0.20.11") should have been 1'); - - done(); - } catch(error) { - done(error); - } - }); - -}); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/L0CompareVersions.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/L0CompareVersions.ts deleted file mode 100644 index ad11c078..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/L0CompareVersions.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../src/azure-terraform-command-handler'; -import tasks = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -// test cases for compareVersions -if (terraformCommandHandlerAzureRM.compareVersions("0.20.7", "0.20.8") === -1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.7", "0.20.8") should have been -1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.8") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.8") should have been 1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.2.9", "0.2.9") === 0) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.2.9", "0.2.9") should have been 0'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.09") === 0) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.09") should have been 0'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.21.9", "0.20.9") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.21.9", "0.20.9") should have been 1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("1.20.10", "0.20.11") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("1.20.10", "0.20.11") should have been 1'); -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/MultipleProviderWarning.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/MultipleProviderWarning.ts deleted file mode 100644 index 6c5a5590..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/MultipleProviderWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './MultipleProviderWarningL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm\nprovider aws\nprovider gcp" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts deleted file mode 100644 index 12e01c99..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'MultipleProviderWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts deleted file mode 100644 index 5ddc2069..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'SingleProviderNoWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 53a4c2ff..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 9612c361..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 0ab18938..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts deleted file mode 100644 index efd077a5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index 3e7ebb25..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index 655abe9b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index c3328bcf..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 1be3287d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 12ea0994..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index 96756555..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b2ceec7d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index aaa29db7..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index 52be7867..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 90b7aaf1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 1ba7c105..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index c00888f3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index def449a6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 0f613b1f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.onlyPlan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts deleted file mode 100644 index f7c35e0f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider gcp" - }, - "terraform plan -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index ad8eaa47..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index ac985c87..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider gcp" - }, - "terraform plan": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 5a10e476..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.onlyPlan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index 4db0e496..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts deleted file mode 100644 index 4b819a80..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index f68aec6e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index 699f585b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index 07b55455..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index ab786a7d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b5915831..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index 2591fdfc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index 94f69ba5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index d00984fe..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 8e630331..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index 4158f2eb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 91ceb426..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index d05edcf9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index bdf86b0c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 186d1e3d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/Tests/package-lock.json b/Tasks/TerraformTask/TerraformTaskV2/Tests/package-lock.json deleted file mode 100644 index 35edae10..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/Tests/package-lock.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" - } - }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/ThirdPartyNotices.txt b/Tasks/TerraformTask/TerraformTaskV2/ThirdPartyNotices.txt deleted file mode 100644 index 2b5f4c15..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/ThirdPartyNotices.txt +++ /dev/null @@ -1,345 +0,0 @@ - -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION -Do Not Translate or Localize - -Terraform incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. - -1. @types/mocha (https://github.com/DefinitelyTyped/DefinitelyTyped.git) -2. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -3. @types/q (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -4. azure-pipelines-task-lib (https://github.com/microsoft/azure-pipelines-task-lib) -5. minimatch (https://github.com/isaacs/minimatch) -6. Mockery (https://github.com/mfncooper/mockery) -7. Q (https://github.com/kriskowal/q) -8. semver (https://github.com/npm/node-semver/) -9. ShellJS (https://github.com/shelljs/shelljs) -10. uuid (https://www.npmjs.com/package/node-uuid) -11. balanced-match (https://github.com/juliangruber/balanced-match) -12. brace-expansion (https://github.com/juliangruber/brace-expansion) -13. concat-map (https://github.com/substack/node-concat-map) - -%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/mocha NOTICES, INFORMATION, AND LICENSE - -%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/node NOTICES, INFORMATION, AND LICENSE - -%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/q NOTICES, INFORMATION, AND LICENSE - -%% azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -========================================= -END OF azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE - -%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF minimatch NOTICES, INFORMATION, AND LICENSE - -%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyrights for code authored by Yahoo! Inc. is licensed under the following -terms: - -MIT License - - Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -========================================= -END OF Mockery NOTICES, INFORMATION, AND LICENSE - -%% Q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - - The file q.js is prefaced by the following additional third-party subcomponent information: - - /*! - * - * Copyright 2009-2012 Kris Kowal under the terms of the MIT - * license found at http://github.com/kriskowal/q/raw/master/LICENSE - * - * With parts by Tyler Close - * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found - * at http://www.opensource.org/licenses/mit-license.html - * Forked at ref_send.js version: 2009-05-11 - * - * With parts by Mark Miller - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -========================================= -END OF Q NOTICES, INFORMATION, AND LICENSE - -%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF semver NOTICES, INFORMATION, AND LICENSE - -%% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright (c) 2012, Artur Adib - All rights reserved. - - You may use this project under the terms of the New BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF ShellJS NOTICES, INFORMATION, AND LICENSE - -%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) 2010-2012 Robert Kieffer - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF uuid NOTICES, INFORMATION, AND LICENSE - -%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF balanced-match NOTICES, INFORMATION, AND LICENSE - -%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF brace-expansion NOTICES, INFORMATION, AND LICENSE - -%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) James Halliday/substack - - This software is released under the MIT license: - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF concat-map NOTICES, INFORMATION, AND LICENSE diff --git a/Tasks/TerraformTask/TerraformTaskV2/icon.png b/Tasks/TerraformTask/TerraformTaskV2/icon.png deleted file mode 100644 index 7f0bb0f4..00000000 Binary files a/Tasks/TerraformTask/TerraformTaskV2/icon.png and /dev/null differ diff --git a/Tasks/TerraformTask/TerraformTaskV2/icon.svg b/Tasks/TerraformTask/TerraformTaskV2/icon.svg deleted file mode 100644 index d270ea55..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Tasks/TerraformTask/TerraformTaskV2/make.json b/Tasks/TerraformTask/TerraformTaskV2/make.json deleted file mode 100644 index 2c63c085..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/make.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/package-lock.json b/Tasks/TerraformTask/TerraformTaskV2/package-lock.json deleted file mode 100644 index 1dab71d1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/package-lock.json +++ /dev/null @@ -1,1937 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^3.3.1", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "ts-loader": "^9.4.2", - "typescript": "^4.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true, - "peer": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true, - "peer": true - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", - "dev": true, - "peer": true - }, - "node_modules/@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "peer": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peer": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/azure-pipelines-task-lib": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz", - "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==", - "dependencies": { - "minimatch": "3.0.5", - "mockery": "^1.7.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001515", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", - "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.459", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.459.tgz", - "integrity": "sha512-XXRS5NFv8nCrBL74Rm3qhJjA2VCsRFx0OjHKBMPI0otij56aun8UWiKTDABmd5/7GTR021pA4wivs+Ri6XCElg==", - "dev": true, - "peer": true - }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", - "dev": true, - "peer": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "peer": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "peer": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "peer": true - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "peer": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mockery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "peer": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true, - "peer": true - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true, - "peer": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "peer": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "peer": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.0.tgz", - "integrity": "sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", - "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-loader": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", - "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack": { - "version": "5.88.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", - "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/package.json b/Tasks/TerraformTask/TerraformTaskV2/package.json deleted file mode 100644 index 2261eefc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^3.3.1", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "ts-loader": "^9.4.2", - "typescript": "^4.0.0" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/src/aws-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV2/src/aws-terraform-command-handler.ts deleted file mode 100644 index 30e21371..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/src/aws-terraform-command-handler.ts +++ /dev/null @@ -1,35 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; - -export class TerraformCommandHandlerAWS extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "aws"; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('bucket', tasks.getInput("backendAWSBucketName", true)); - this.backendConfig.set('key', tasks.getInput("backendAWSKey", true)); - this.backendConfig.set('region', tasks.getEndpointAuthorizationParameter(backendServiceName, "region", true)); - this.backendConfig.set('access_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "username", true)); - this.backendConfig.set('secret_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "password", true)); - } - - public handleBackend(terraformToolRunner: ToolRunner): void { - let backendServiceName = tasks.getInput("backendServiceAWS", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public handleProvider(command: TerraformAuthorizationCommandInitializer) { - if (command.serviceProvidername) { - process.env['AWS_ACCESS_KEY_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "username", false); - process.env['AWS_SECRET_ACCESS_KEY'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "password", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/src/azure-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV2/src/azure-terraform-command-handler.ts deleted file mode 100644 index 8445c3dc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/src/azure-terraform-command-handler.ts +++ /dev/null @@ -1,56 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; - -export class TerraformCommandHandlerAzureRM extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "azurerm"; - } - - private setupBackend(backendServiceName: string) { - var serviceprincipalid = tasks.getEndpointAuthorizationParameter(backendServiceName, "serviceprincipalid", true); - var serviceprincipalkey = tasks.getEndpointAuthorizationParameter(backendServiceName, "serviceprincipalkey", true); - - this.backendConfig.set('storage_account_name', tasks.getInput("backendAzureRmStorageAccountName", true)); - this.backendConfig.set('container_name', tasks.getInput("backendAzureRmContainerName", true)); - this.backendConfig.set('key', tasks.getInput("backendAzureRmKey", true)); - this.backendConfig.set('resource_group_name', tasks.getInput("backendAzureRmResourceGroupName", true)); - this.backendConfig.set('subscription_id', tasks.getEndpointDataParameter(backendServiceName, "subscriptionid", true)); - this.backendConfig.set('tenant_id', tasks.getEndpointAuthorizationParameter(backendServiceName, "tenantid", true)); - - if(serviceprincipalid && serviceprincipalkey) { - this.backendConfig.set('client_id', serviceprincipalid); - this.backendConfig.set('client_secret', serviceprincipalkey); - } else { - this.backendConfig.set('use_msi', 'true'); - } - } - - public handleBackend(terraformToolRunner: ToolRunner): void { - let backendServiceName = tasks.getInput("backendServiceArm", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public handleProvider(command: TerraformAuthorizationCommandInitializer) { - if (command.serviceProvidername) { - var serviceprincipalid = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalid", true); - var serviceprincipalkey = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalkey", true); - - process.env['ARM_SUBSCRIPTION_ID'] = tasks.getEndpointDataParameter(command.serviceProvidername, "subscriptionid", false); - process.env['ARM_TENANT_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "tenantid", false); - - if(serviceprincipalid && serviceprincipalkey) { - process.env['ARM_CLIENT_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalid", true); - process.env['ARM_CLIENT_SECRET'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalkey", true); - } else { - process.env['ARM_USE_MSI'] = 'true'; - } - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/src/base-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV2/src/base-terraform-command-handler.ts deleted file mode 100644 index 5fa6891e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/src/base-terraform-command-handler.ts +++ /dev/null @@ -1,332 +0,0 @@ -import {TerraformToolHandler, ITerraformToolHandler} from './terraform'; -import {ToolRunner, IExecOptions, IExecSyncOptions, IExecSyncResult} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformBaseCommandInitializer, TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import tasks = require('azure-pipelines-task-lib/task'); -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; -const fs = require('fs'); -const del = require('del'); - -export abstract class BaseTerraformCommandHandler { - providerName: string; - terraformToolHandler: ITerraformToolHandler; - backendConfig: Map; - - abstract handleBackend(terraformToolRunner: ToolRunner); - abstract handleProvider(command: TerraformAuthorizationCommandInitializer); - - constructor() { - this.providerName = ""; - this.terraformToolHandler = new TerraformToolHandler(tasks); - this.backendConfig = new Map(); - } - - public compareVersions(version1: string, version2: string) { - let versionNumbers1: string[] = version1.split('.'); - let versionNumbers2: string[] = version2.split('.'); - - const smallerLength = Math.min(versionNumbers1.length, versionNumbers2.length); - - let versionNumbersInt1: number[] = new Array(smallerLength); - let versionNumbersInt2: number[] = new Array(smallerLength); - - for (let i = 0; i < smallerLength; i++) { - versionNumbersInt1[i] = parseInt(versionNumbers1[i], 10); - versionNumbersInt2[i] = parseInt(versionNumbers2[i], 10); - if (versionNumbersInt1[i] > versionNumbersInt2[i]) return 1; - if (versionNumbersInt1[i] < versionNumbersInt2[i]) return -1; - } - - return versionNumbersInt1.length == versionNumbersInt2.length ? 0: (versionNumbersInt1.length < versionNumbersInt2.length ? -1 : 1); - } - - public warnIfMultipleProviders(): void { - let terraformPath; - try { - terraformPath = tasks.which("terraform", true); - } catch(err) { - throw new Error(tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = tasks.tool(terraformPath); - terraformToolRunner.arg("providers"); - let commandOutput = terraformToolRunner.execSync({ - cwd: tasks.getInput("workingDirectory") - }); - - let countProviders = ["aws", "azurerm", "google"].filter(provider => commandOutput.stdout.includes(provider)).length; - - tasks.debug(countProviders.toString()); - if (countProviders > 1) { - tasks.warning("Multiple provider blocks specified in the .tf files in the current working directory."); - } - } - - public getServiceProviderNameFromProviderInput(): string { - let provider: string = tasks.getInput("provider", true); - - switch (provider) { - case "azurerm": return "AzureRM"; - case "aws" : return "AWS"; - case "gcp" : return "GCP"; - } - } - - public async init(): Promise { - let initCommand = new TerraformBaseCommandInitializer( - "init", - tasks.getInput("workingDirectory"), - tasks.getInput("commandOptions") - ); - - let terraformTool; - - terraformTool = this.terraformToolHandler.createToolRunner(initCommand); - this.handleBackend(terraformTool); - - return terraformTool.exec( { - cwd: initCommand.workingDirectory - }); - } - - protected checkIfShowCommandSupportsJsonOutput(): number { - let terraformPath; - try { - terraformPath = tasks.which("terraform", true); - } catch(err) { - throw new Error(tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = tasks.tool(terraformPath); - terraformToolRunner.arg("version"); - - let outputContents = terraformToolRunner.execSync({ - cwd: tasks.getInput("workingDirectory") - }).stdout; - - let outputLines: string[] = outputContents.split('\n'); - // First line has the format "Terraform v0.12.1" - let firstLine = outputLines[0]; - // Extract only the version information from the first line i.e. "0.12.1" - let currentVersion = firstLine.substring(11); - // Check to see if this version is greater than or equal to 0.12.0 - return this.compareVersions(currentVersion, "0.12.0"); - } - - public async onlyPlan(): Promise { - this.warnIfMultipleProviders(); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let commandOptions = tasks.getInput("commandOptions") != null ? `${tasks.getInput("commandOptions")} -detailed-exitcode`:`-detailed-exitcode` - let planCommand = new TerraformAuthorizationCommandInitializer( - "plan", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - commandOptions - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(planCommand); - this.handleProvider(planCommand); - - let result = await terraformTool.exec( { - cwd: planCommand.workingDirectory, - ignoreReturnCode: true - }); - - if (result !== 0 && result !== 2) { - throw new Error(tasks.loc("TerraformPlanFailed", result)); - } - - return result; - } - - public setOutputVariableToPlanFilePath() { - // Do terraform version to check if version is >= 0.12.0 - if (this.checkIfShowCommandSupportsJsonOutput() >= 0) { - let terraformTool; - let fileStream; - - // Do terraform plan with -out flag to output the binary plan file - const binaryPlanFilePath = path.resolve(`plan-binary-${uuidV4()}.tfplan`); - const tempFileForPlanOutput = path.resolve(`temp-plan-${uuidV4()}.txt`); - - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let commandOptions = tasks.getInput("commandOptions") != null ? `${tasks.getInput("commandOptions")} -out=${binaryPlanFilePath}`:`-out=${binaryPlanFilePath}` - - let planCommand = new TerraformAuthorizationCommandInitializer( - "plan", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - commandOptions - ); - terraformTool = this.terraformToolHandler.createToolRunner(planCommand); - this.handleProvider(planCommand); - fileStream = fs.createWriteStream(tempFileForPlanOutput); - terraformTool.execSync({ - cwd: planCommand.workingDirectory, - outStream: fileStream - }); - - // Do terraform show with -json flag to output the json plan file - const jsonPlanFilePath = path.resolve(`plan-json-${uuidV4()}.json`); - const tempFileForJsonPlanOutput = path.resolve(`temp-plan-json-${uuidV4()}.json`) - let commandOutput: IExecSyncResult; - let showCommand = new TerraformBaseCommandInitializer( - "show", - tasks.getInput("workingDirectory"), - `-json ${binaryPlanFilePath}` - ); - terraformTool = this.terraformToolHandler.createToolRunner(showCommand); - fileStream = fs.createWriteStream(tempFileForJsonPlanOutput); - commandOutput = terraformTool.execSync({ - cwd: showCommand.workingDirectory, - outStream: fileStream - }); - - // Write command output to the json plan file - tasks.writeFile(jsonPlanFilePath, commandOutput.stdout); - // Set the output variable to the json plan file path - tasks.setVariable('jsonPlanFilePath', jsonPlanFilePath); - - // Delete all the files that are not needed any further - if (tasks.exist(binaryPlanFilePath)) { - (async () => { - await del([binaryPlanFilePath]); - })(); - } - - if (tasks.exist(tempFileForPlanOutput)) { - (async () => { - await del([tempFileForPlanOutput]); - })(); - } - - if (tasks.exist(tempFileForJsonPlanOutput)) { - (async () => { - await del([tempFileForJsonPlanOutput]); - })(); - } - - } else { - tasks.warning("Terraform show command does not support -json flag for terraform versions older than 0.12.0. The output variable named 'jsonPlanFilePath' was not set.") - } - } - - public async plan(): Promise { - let exitCode = await this.onlyPlan(); - tasks.setVariable('changesPresent', (exitCode === 2).toString(), false, true); - this.setOutputVariableToPlanFilePath(); - - return Promise.resolve(0); - } - - public async onlyApply(): Promise { - let terraformTool; - this.warnIfMultipleProviders(); - let validateCommand = new TerraformBaseCommandInitializer("validate", tasks.getInput("workingDirectory"), ''); - terraformTool = this.terraformToolHandler.createToolRunner(validateCommand); - await terraformTool.exec( { - cwd: validateCommand.workingDirectory - }); - - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let autoApprove: string = '-auto-approve'; - let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; - - if (additionalArgs.includes(autoApprove) === false) { - additionalArgs = `${autoApprove} ${additionalArgs}`; - } - - let applyCommand = new TerraformAuthorizationCommandInitializer( - "apply", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - additionalArgs - ); - - terraformTool = this.terraformToolHandler.createToolRunner(applyCommand); - this.handleProvider(applyCommand); - - return terraformTool.exec( { - cwd: applyCommand.workingDirectory - }); - } - - public setOutputVariableToJsonOutputVariablesFilesPath() { - let additionalArgs: string = `-json` - let outputCommand = new TerraformBaseCommandInitializer( - "output", - tasks.getInput("workingDirectory"), - additionalArgs - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(outputCommand); - - const jsonOutputVariablesFilePath = path.resolve(`output-${uuidV4()}.json`); - const tempFileForJsonOutputVariables = path.resolve(`temp-output-${uuidV4()}.json`); - const fileStream = fs.createWriteStream(tempFileForJsonOutputVariables); - let commandOutput = terraformTool.execSync({ - cwd: outputCommand.workingDirectory, - outStream: fileStream - }); - - tasks.writeFile(jsonOutputVariablesFilePath, commandOutput.stdout); - tasks.setVariable('jsonOutputVariablesPath', jsonOutputVariablesFilePath); - - // Delete the temp file as it is not needed further - if (tasks.exist(tempFileForJsonOutputVariables)) { - (async () => { - await del([tempFileForJsonOutputVariables]); - })(); - } - } - - public async apply(): Promise { - await this.onlyApply(); - this.setOutputVariableToJsonOutputVariablesFilesPath(); - - return Promise.resolve(0); - }; - - public async destroy(): Promise { - this.warnIfMultipleProviders(); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let autoApprove: string = '-auto-approve'; - let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; - - if (additionalArgs.includes(autoApprove) === false) { - additionalArgs = `${autoApprove} ${additionalArgs}`; - } - - let destroyCommand = new TerraformAuthorizationCommandInitializer( - "destroy", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - additionalArgs - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(destroyCommand); - this.handleProvider(destroyCommand); - - return terraformTool.exec( { - cwd: destroyCommand.workingDirectory - }); - }; - - public async validate(): Promise { - let validateCommand = new TerraformBaseCommandInitializer( - "validate", - tasks.getInput("workingDirectory"), - tasks.getInput("commandOptions") - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(validateCommand); - - return terraformTool.exec({ - cwd: validateCommand.workingDirectory - }); - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/src/gcp-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV2/src/gcp-terraform-command-handler.ts deleted file mode 100644 index e757db8c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/src/gcp-terraform-command-handler.ts +++ /dev/null @@ -1,55 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; - -export class TerraformCommandHandlerGCP extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "gcp"; - } - - private getJsonKeyFilePath(serviceName: string) { - // Get credentials for json file - const jsonKeyFilePath = path.resolve(`credentials-${uuidV4()}.json`); - - let clientEmail = tasks.getEndpointAuthorizationParameter(serviceName, "Issuer", false); - let tokenUri = tasks.getEndpointAuthorizationParameter(serviceName, "Audience", false); - let privateKey = tasks.getEndpointAuthorizationParameter(serviceName, "PrivateKey", false); - - // Create json string and write it to the file - let jsonCredsString = `{"type": "service_account", "private_key": "${privateKey}", "client_email": "${clientEmail}", "token_uri": "${tokenUri}"}` - tasks.writeFile(jsonKeyFilePath, jsonCredsString); - - return jsonKeyFilePath; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('bucket', tasks.getInput("backendGCPBucketName", true)); - this.backendConfig.set('prefix', tasks.getInput("backendGCPPrefix", false)); - - let jsonKeyFilePath = this.getJsonKeyFilePath(backendServiceName); - - this.backendConfig.set('credentials', jsonKeyFilePath); - } - - public handleBackend(terraformToolRunner: ToolRunner): void { - let backendServiceName = tasks.getInput("backendServiceGCP", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public handleProvider(command: TerraformAuthorizationCommandInitializer) { - if (command.serviceProvidername) { - let jsonKeyFilePath = this.getJsonKeyFilePath(command.serviceProvidername); - - process.env['GOOGLE_CREDENTIALS'] = `${jsonKeyFilePath}`; - process.env['GOOGLE_PROJECT'] = tasks.getEndpointDataParameter(command.serviceProvidername, "project", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/src/index.ts b/Tasks/TerraformTask/TerraformTaskV2/src/index.ts deleted file mode 100644 index 7407a745..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/src/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ParentCommandHandler} from './parent-handler'; -import path = require('path'); - -async function run() { - tasks.setResourcePath(path.join(__dirname, '..', 'task.json')); - - let parentHandler = new ParentCommandHandler(); - try { - await parentHandler.execute(tasks.getInput("provider"), tasks.getInput("command")); - tasks.setResult(tasks.TaskResult.Succeeded, ""); - } catch (error) { - tasks.setResult(tasks.TaskResult.Failed, error); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/src/parent-handler.ts b/Tasks/TerraformTask/TerraformTaskV2/src/parent-handler.ts deleted file mode 100644 index 5f94bba5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/src/parent-handler.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { BaseTerraformCommandHandler } from './base-terraform-command-handler'; -import { TerraformCommandHandlerAzureRM } from './azure-terraform-command-handler'; -import { TerraformCommandHandlerAWS } from './aws-terraform-command-handler'; -import { TerraformCommandHandlerGCP } from './gcp-terraform-command-handler'; - -export interface IParentCommandHandler { - execute(providerName: string, command: string): Promise; -} - -export class ParentCommandHandler implements IParentCommandHandler { - public async execute(providerName: string, command: string): Promise { - // Create corresponding command handler according to provider name - let provider: BaseTerraformCommandHandler; - - switch(providerName) { - case "azurerm": - provider = new TerraformCommandHandlerAzureRM(); - break; - - case "aws": - provider = new TerraformCommandHandlerAWS(); - break; - - case "gcp": - provider = new TerraformCommandHandlerGCP(); - break; - } - - // Run the corrresponding command according to command name - return await provider[command](); - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/src/terraform-commands.ts b/Tasks/TerraformTask/TerraformTaskV2/src/terraform-commands.ts deleted file mode 100644 index d95b2a23..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/src/terraform-commands.ts +++ /dev/null @@ -1,29 +0,0 @@ -export class TerraformBaseCommandInitializer { - public readonly name: string; - public readonly workingDirectory: string; - public readonly additionalArgs: string | undefined; - - constructor( - name: string, - workingDirectory: string, - additionalArgs?: string | undefined - ) { - this.name = name; - this.workingDirectory = workingDirectory; - this.additionalArgs = additionalArgs; - } -} - -export class TerraformAuthorizationCommandInitializer extends TerraformBaseCommandInitializer { - readonly serviceProvidername: string; - - constructor( - name: string, - workingDirectory: string, - serviceProvidername: string, - additionalArgs?: string | undefined - ) { - super(name, workingDirectory, additionalArgs); - this.serviceProvidername = serviceProvidername; - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV2/src/terraform.ts b/Tasks/TerraformTask/TerraformTaskV2/src/terraform.ts deleted file mode 100644 index 59ea03a6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/src/terraform.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner' -import { TerraformBaseCommandInitializer } from './terraform-commands' - -export interface ITerraformToolHandler { - createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner; -} - -export class TerraformToolHandler implements ITerraformToolHandler { - private readonly tasks: any; - - constructor(tasks: any) { - this.tasks = tasks; - } - - public createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner { - let terraformPath; - try { - terraformPath = this.tasks.which("terraform", true); - } catch(err) { - throw new Error(this.tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = this.tasks.tool(terraformPath); - if (command) { - terraformToolRunner.arg(command.name); - if (command.additionalArgs) { - terraformToolRunner.line(command.additionalArgs); - } - } - - return terraformToolRunner; - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/task.json b/Tasks/TerraformTask/TerraformTaskV2/task.json deleted file mode 100644 index 1b308c00..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/task.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "id": "FE504ACC-6115-40CB-89FF-191386B5E7BF", - "name": "TerraformTaskV2", - "friendlyName": "Terraform", - "description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", - "author": "Microsoft Corporation", - "helpMarkDown": "[Learn more about this task](https://aka.ms/AAf0uqr)", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "2", - "Minor": "202", - "Patch": "0" - }, - "instanceNameFormat": "Terraform : $(provider)", - "execution": { - "Node10": { - "target": "src/index.js" - } - }, - "groups": [ - { - "name": "backendAzureRm", - "displayName": "AzureRM backend configuration", - "isExpanded": true, - "visibleRule": "provider = azurerm && command = init" - }, - { - "name": "backendAWS", - "displayName": "Amazon Web Services(AWS) backend configuration", - "isExpanded": true, - "visibleRule": "provider = aws && command = init" - }, - { - "name": "backendGCP", - "displayName": "Google Cloud Platform(GCP) backend configuration", - "isExpanded": true, - "visibleRule": "provider = gcp && command = init" - } - ], - "inputs": [{ - "name": "provider", - "type": "picklist", - "label": "Provider", - "defaultValue": "azurerm", - "required": true, - "helpMarkDown": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", - "options": { - "azurerm": "azurerm", - "aws": "aws", - "gcp": "gcp" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "command", - "type": "pickList", - "label": "Command", - "defaultValue": "init", - "required": true, - "helpMarkDown": "The terraform command to execute.", - "options": { - "init": "init", - "validate": "validate", - "plan": "plan", - "apply": "validate and apply", - "destroy": "destroy" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "workingDirectory", - "type": "filePath", - "label": "Configuration directory", - "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", - "required": false - }, - { - "name": "commandOptions", - "type": "string", - "label": "Additional command arguments", - "helpMarkDown": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", - "required": false - }, - { - "name": "environmentServiceNameAzureRM", - "type": "connectedService:AzureRM", - "label": "Azure subscription", - "required": true, - "visibleRule": "provider = azurerm && command != init && command != validate", - "helpMarkDown": "Select an Azure Resource Manager subscription for the deployment" - }, - { - "name": "environmentServiceNameAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "Amazon Web Services connection", - "required": true, - "visibleRule": "provider = aws && command != init && command != validate", - "helpMarkDown": "Select an Amazon Web Services connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button." - }, - { - "name": "environmentServiceNameGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "Google Cloud Platform connection", - "required": true, - "visibleRule": "provider = gcp && command != init && command != validate", - "helpMarkDown": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button." - }, - { - "name": "backendServiceArm", - "type": "connectedService:AzureRM", - "label": "Azure subscription", - "required": true, - "helpMarkDown": "Azure resource manager subscription for the terraform backend configuration", - "groupName": "backendAzureRm" - }, - { - "name": "backendAzureRmResourceGroupName", - "type": "pickList", - "label": "Resource group", - "required": true, - "helpMarkDown": "The name of the resource group which contains the storage account selected below.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmStorageAccountName", - "type": "pickList", - "label": "Storage account", - "required": true, - "helpMarkDown": "The name of the storage account which contains the Azure Blob container selected below.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmContainerName", - "type": "pickList", - "label": "Container", - "required": true, - "helpMarkDown": "The name of the Azure Blob container in which to store the Terraform remote state file.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmKey", - "type": "string", - "label": "Key", - "required": true, - "helpMarkDown": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", - "groupName": "backendAzureRm" - }, - { - "name": "backendServiceAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "Amazon Web Services connection", - "required": true, - "helpMarkDown": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "groupName": "backendAWS" - }, - { - "name": "backendAWSBucketName", - "type": "pickList", - "label": "Bucket", - "required": true, - "helpMarkDown": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", - "groupName": "backendAWS", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAWSKey", - "type": "string", - "label": "Key", - "required": true, - "helpMarkDown": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", - "groupName": "backendAWS" - }, - { - "name": "backendServiceGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "Google Cloud Platform connection", - "required": true, - "helpMarkDown": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "groupName": "backendGCP" - }, - { - "name": "backendGCPBucketName", - "type": "pickList", - "label": "Bucket", - "required": true, - "helpMarkDown": "The name of the GCP storage bucket for storing the Terraform remote state file.", - "groupName": "backendGCP", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendGCPPrefix", - "type": "string", - "label": "Prefix of state file", - "required": false, - "helpMarkDown": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "groupName": "backendGCP" - } - ], - "dataSourceBindings": [ - { - "target": "backendAzureRmResourceGroupName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourcegroups?api-version=2019-05-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmStorageAccountName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmContainerName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$(backendAzureRmStorageAccountName)/blobServices/default/containers?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAWSBucketName", - "endpointId": "$(backendServiceAWS)", - "dataSourceName": "AWS" - }, - { - "target": "backendGCPBucketName", - "endpointId": "$(backendServiceGCP)", - "dataSourceName": "GCP" - } - ], - "outputVariables": [ - { - "name": "jsonPlanFilePath", - "description": "The location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." - }, - { - "name": "jsonOutputVariablesPath", - "description": "The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'apply'." - }, - { - "name": "changesPresent", - "description": "A boolean indicating if the terraform plan found any changes to apply." - } - ], - "messages": { - "TerraformToolNotFound": "Failed to find terraform tool in paths", - "TerraformPlanFailed": "Terraform Plan failed with exit code: %s" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/task.loc.json b/Tasks/TerraformTask/TerraformTaskV2/task.loc.json deleted file mode 100644 index 4e6a9da6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/task.loc.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "id": "FE504ACC-6115-40CB-89FF-191386B5E7BF", - "name": "TerraformTaskV2", - "friendlyName": "ms-resource:loc.friendlyName", - "description": "ms-resource:loc.description", - "author": "Microsoft Corporation", - "helpMarkDown": "ms-resource:loc.helpMarkDown", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "2", - "Minor": "202", - "Patch": "0" - }, - "instanceNameFormat": "ms-resource:loc.instanceNameFormat", - "execution": { - "Node10": { - "target": "src/index.js" - } - }, - "groups": [ - { - "name": "backendAzureRm", - "displayName": "ms-resource:loc.group.displayName.backendAzureRm", - "isExpanded": true, - "visibleRule": "provider = azurerm && command = init" - }, - { - "name": "backendAWS", - "displayName": "ms-resource:loc.group.displayName.backendAWS", - "isExpanded": true, - "visibleRule": "provider = aws && command = init" - }, - { - "name": "backendGCP", - "displayName": "ms-resource:loc.group.displayName.backendGCP", - "isExpanded": true, - "visibleRule": "provider = gcp && command = init" - } - ], - "inputs": [ - { - "name": "provider", - "type": "picklist", - "label": "ms-resource:loc.input.label.provider", - "defaultValue": "azurerm", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.provider", - "options": { - "azurerm": "azurerm", - "aws": "aws", - "gcp": "gcp" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "command", - "type": "pickList", - "label": "ms-resource:loc.input.label.command", - "defaultValue": "init", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.command", - "options": { - "init": "init", - "validate": "validate", - "plan": "plan", - "apply": "validate and apply", - "destroy": "destroy" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "workingDirectory", - "type": "filePath", - "label": "ms-resource:loc.input.label.workingDirectory", - "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "ms-resource:loc.input.help.workingDirectory", - "required": false - }, - { - "name": "commandOptions", - "type": "string", - "label": "ms-resource:loc.input.label.commandOptions", - "helpMarkDown": "ms-resource:loc.input.help.commandOptions", - "required": false - }, - { - "name": "environmentServiceNameAzureRM", - "type": "connectedService:AzureRM", - "label": "ms-resource:loc.input.label.environmentServiceNameAzureRM", - "required": true, - "visibleRule": "provider = azurerm && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameAzureRM" - }, - { - "name": "environmentServiceNameAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "ms-resource:loc.input.label.environmentServiceNameAWS", - "required": true, - "visibleRule": "provider = aws && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameAWS" - }, - { - "name": "environmentServiceNameGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "ms-resource:loc.input.label.environmentServiceNameGCP", - "required": true, - "visibleRule": "provider = gcp && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameGCP" - }, - { - "name": "backendServiceArm", - "type": "connectedService:AzureRM", - "label": "ms-resource:loc.input.label.backendServiceArm", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceArm", - "groupName": "backendAzureRm" - }, - { - "name": "backendAzureRmResourceGroupName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmResourceGroupName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmResourceGroupName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmStorageAccountName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmStorageAccountName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmStorageAccountName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmContainerName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmContainerName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmContainerName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmKey", - "type": "string", - "label": "ms-resource:loc.input.label.backendAzureRmKey", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmKey", - "groupName": "backendAzureRm" - }, - { - "name": "backendServiceAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "ms-resource:loc.input.label.backendServiceAWS", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceAWS", - "groupName": "backendAWS" - }, - { - "name": "backendAWSBucketName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAWSBucketName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAWSBucketName", - "groupName": "backendAWS", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAWSKey", - "type": "string", - "label": "ms-resource:loc.input.label.backendAWSKey", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAWSKey", - "groupName": "backendAWS" - }, - { - "name": "backendServiceGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "ms-resource:loc.input.label.backendServiceGCP", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceGCP", - "groupName": "backendGCP" - }, - { - "name": "backendGCPBucketName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendGCPBucketName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendGCPBucketName", - "groupName": "backendGCP", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendGCPPrefix", - "type": "string", - "label": "ms-resource:loc.input.label.backendGCPPrefix", - "required": false, - "helpMarkDown": "ms-resource:loc.input.help.backendGCPPrefix", - "groupName": "backendGCP" - } - ], - "dataSourceBindings": [ - { - "target": "backendAzureRmResourceGroupName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourcegroups?api-version=2019-05-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmStorageAccountName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmContainerName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$(backendAzureRmStorageAccountName)/blobServices/default/containers?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAWSBucketName", - "endpointId": "$(backendServiceAWS)", - "dataSourceName": "AWS" - }, - { - "target": "backendGCPBucketName", - "endpointId": "$(backendServiceGCP)", - "dataSourceName": "GCP" - } - ], - "outputVariables": [ - { - "name": "jsonPlanFilePath", - "description": "The location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." - }, - { - "name": "jsonOutputVariablesPath", - "description": "The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'apply'." - }, - { - "name": "changesPresent", - "description": "A boolean indicating if the terraform plan found any changes to apply." - } - ], - "messages": { - "TerraformToolNotFound": "ms-resource:loc.messages.TerraformToolNotFound", - "TerraformPlanFailed": "ms-resource:loc.messages.TerraformPlanFailed" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV2/tsconfig.json b/Tasks/TerraformTask/TerraformTaskV2/tsconfig.json deleted file mode 100644 index 9ad09ffe..00000000 --- a/Tasks/TerraformTask/TerraformTaskV2/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "commonjs", - "skipLibCheck": true - }, - "exclude": ["Tests"] -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/README.md b/Tasks/TerraformTask/TerraformTaskV3/README.md deleted file mode 100644 index 9d3214bf..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# Terraform : Provision infrastructure on Azure, Amazon Web Services(AWS) and Google Cloud Platform(GCP) using the terraform command-line - - -## Overview - -This task enables running Terraform commands as part of Azure Build and Release Pipelines. It supports the following Terraform commands -- init -- validate -- plan -- apply -- destroy -- show -- output -- custom - -The following providers are currently supported: -- AzureRM -- Amazon Web Services -- Google Cloud Platform - - -## Contact Information - -Please report a problem at [Developer Community Forum](https://developercommunity.visualstudio.com/spaces/21/index.html) if you are facing problems in making this task work. You can also share feedback about the task like, what more functionality should be added to the task, what other tasks you would like to have, at the same place. - - -## Pre-requisites for the task - - -The only pre-requisite for the task is that Terraform must be installed on the Azure Pipelines build agent. If you want an exact version of Terraform on the agent then you can use the [Terraform tool installer task](https://aka.ms/AAf1a0p). Terraform Task V3 only supports `terraform >= 0.12`. - - -## Parameters of the task - -- **Display name\*:** Provide a name to identify the task among others in your pipeline. - -- **Provider\*:** Select the provider in which your resources will be managed by Terraform. Currently, the following providers are supported: - - azurerm - - aws - - gcp - -- **Command\*:** Select the terraform command to execute. Currently, the following commands are supported: - - init - - validate - - plan - - apply - - destroy - - show - - output - - custom - -- **Configuration directory\*:** Select the directory that contains all the relevant terraform config (.tf) files. The task intends to use Terraform to build infrastructure on one provider at a time. So, all the config files in the configuration directory together should not specify more than one provider. - -- **Additional command arguments\*:** Provide any additional arguments for the selected command either as key-value pairs(-key=value) or as command line flags(-flag). Multiple options can also be provided delimited by spaces(-key1=value1 -key2=value2 -flag1 -flag2). - -Examples: - - -out=tfplan (for terraform plan) - - tfplan -auto-approve (for terraform apply) - -Options specific to **terraform init** command - -- Options specific to **AzureRM backend configuration** - - **Azure subscription\*:** Select the Azure subscription to use for AzureRM backend configuration - - **Resource group\*:** Select the name of the resource group in which you want to store the terraform remote state file - - **Storage account\*:** Select the name of the storage account belonging to the selected resource group in which you want to store the terrafor remote state file - - **Container\*:** Select the name of the Azure Blob container belonging to the storage account in which you want to store the terrafor remote state file - - **Key\*:** Specify the relative path to the state file inside the selected container. For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input "tf/terraform.tfstate" - -- Options specific to **Amazon Web Services(AWS) backend configuration** - - **Amazon Web Services connection\*:** Select the AWS connection to use for AWS backend configuration - - **Bucket\*:** Select the name of the Amazon S3 bucket in which you want to store the terraform remote state file - - **Key\*:** Specify the relative path to the state file inside the selected S3 bucket. For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input "tf/terraform.tfstate" - -- Options specific to **Google Cloud Platform(GCP) backend configuration** - - **Google Cloud Platform connection\*:** Select the GCP connection to use for GCP backend configuration - - **Bucket\*:** Select the name of the GCP storage bucket in which you want to store the terraform remote state file - - **Prefix of state file:** Specify the relative path to the state file inside the GCP bucket. For example, if you give the input as "terraform", then the state file, named default.tfstate, will be stored inside an object called terraform. - -Options specific to **terraform plan, apply, show, output, custom and destroy** commands - -- **Azure subscription (only if "azurerm" provider is selected)\*:** Select the AzureRM subscription to use for managing the resources used by the plan, apply, show, output, custom and destroy commands -- **Amazon Web Services connection (only if "aws" provider is selected)\*:** Select the AWS connection to use for managing the resources used by the plan, apply, show, output, custom and destroy commands -- **Google Cloud Platform connection (only if "gcp" provider is selected)\*:** Select the GCP connection to use for managing the resources used by the plan, apply, show, output, custom and destroy commands - -Options specific to **show** -- **outputTo\*:** (console or file). You can choose to save output to file or only show output in console (i.e log) -- **outputFormat\*:** (json or default) . Output in json or default format - -Options specific to **custom** -When selecting custom you can use any command that is supported natively by terraform. -- **customCommand\*:** pass any command that is supported natively by terraform -- **outputTo\*:** (console or file).You can choose to save output to file or only show output in console (i.e log) - -## Output Variables -* **changesPresent:** This varaible is set to true if the plan command finds changes to apply. Can be used by subsequent tasks. Give the producing task a reference name. Then, in a downstream step, you can use the form $(\.changesPresent) to refer to it. - -* **customFilePath:** This variable refers to the location of the file that was created with use of the 'custom' command.

Note: This variable will only be set if 'command' input is set to 'custom' and if you select **outputTo\*:** 'file'. - -* **showFilePath:** This variable refers to the location of the file that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'show'. -* **jsonOutputVariablesPath:** The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'output'. - -## Example Task Usage -Below is a basic example usage of a few commands within the TerraformTaskV3 task. - -```yaml -- task: TerraformTaskV3@3 - displayName: Initialize Terraform - inputs: - provider: 'azurerm' - command: 'init' - backendServiceArm: 'your-backend-service-connection' - backendAzureRmResourceGroupName: 'your-rg-name' - backendAzureRmStorageAccountName: 'your-stg-name' - backendAzureRmContainerName: 'your-container-name' - backendAzureRmKey: 'state.tfstate' - -- task: TerraformTaskV3@3 - name: terraformPlan - displayName: Create Terraform Plan - inputs: - provider: 'azurerm' - command: 'plan' - commandOptions: '-out main.tfplan' - environmentServiceNameAzureRM: 'your-environment-service-connection' - -# Only runs if the 'terraformPlan' task has detected changes the in state. -- task: TerraformTaskV3@3 - displayName: Apply Terraform Plan - condition: eq(variables['terraformPlan.changesPresent'], 'true') - inputs: - provider: 'azurerm' - command: 'apply' - commandOptions: 'main.tfplan' - environmentServiceNameAzureRM: 'your-environment-service-connection' -``` diff --git a/Tasks/TerraformTask/TerraformTaskV3/Strings/resources.resjson/en-US/resources.resjson b/Tasks/TerraformTask/TerraformTaskV3/Strings/resources.resjson/en-US/resources.resjson deleted file mode 100644 index 529dd992..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Strings/resources.resjson/en-US/resources.resjson +++ /dev/null @@ -1,54 +0,0 @@ -{ - "loc.friendlyName": "Terraform", - "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/AAf0uqr)", - "loc.description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", - "loc.instanceNameFormat": "Terraform : $(provider)", - "loc.group.displayName.backendAzureRm": "AzureRM backend configuration", - "loc.group.displayName.backendAWS": "Amazon Web Services(AWS) backend configuration", - "loc.group.displayName.backendGCP": "Google Cloud Platform(GCP) backend configuration", - "loc.input.label.provider": "Provider", - "loc.input.help.provider": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", - "loc.input.label.command": "Command", - "loc.input.help.command": "The terraform command to execute.", - "loc.input.label.customCommand": "Custom command", - "loc.input.help.customCommand": "The custom terraform command to execute.", - "loc.input.label.workingDirectory": "Configuration directory", - "loc.input.help.workingDirectory": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", - "loc.input.label.commandOptions": "Additional command arguments", - "loc.input.help.commandOptions": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", - "loc.input.label.outputTo": "Output to", - "loc.input.help.outputTo": "choose output to file or console. ", - "loc.input.label.fileName": "Filename", - "loc.input.help.fileName": "filename of output", - "loc.input.label.outputFormat": "Output format", - "loc.input.help.outputFormat": "choose format of console ouput for show cmd.", - "loc.input.label.environmentServiceNameAzureRM": "Azure subscription", - "loc.input.help.environmentServiceNameAzureRM": "Select an Azure Resource Manager subscription for the deployment", - "loc.input.label.environmentServiceNameAWS": "Amazon Web Services connection", - "loc.input.help.environmentServiceNameAWS": "Select an Amazon Web Services connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "loc.input.label.environmentServiceNameGCP": "Google Cloud Platform connection", - "loc.input.help.environmentServiceNameGCP": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendServiceArm": "Azure subscription", - "loc.input.help.backendServiceArm": "Azure resource manager subscription for the terraform backend configuration", - "loc.input.label.backendAzureRmResourceGroupName": "Resource group", - "loc.input.help.backendAzureRmResourceGroupName": "The name of the resource group which contains the storage account selected below.", - "loc.input.label.backendAzureRmStorageAccountName": "Storage account", - "loc.input.help.backendAzureRmStorageAccountName": "The name of the storage account which contains the Azure Blob container selected below.", - "loc.input.label.backendAzureRmContainerName": "Container", - "loc.input.help.backendAzureRmContainerName": "The name of the Azure Blob container in which to store the Terraform remote state file.", - "loc.input.label.backendAzureRmKey": "Key", - "loc.input.help.backendAzureRmKey": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", - "loc.input.label.backendServiceAWS": "Amazon Web Services connection", - "loc.input.help.backendServiceAWS": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendAWSBucketName": "Bucket", - "loc.input.help.backendAWSBucketName": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", - "loc.input.label.backendAWSKey": "Key", - "loc.input.help.backendAWSKey": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", - "loc.input.label.backendServiceGCP": "Google Cloud Platform connection", - "loc.input.help.backendServiceGCP": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendGCPBucketName": "Bucket", - "loc.input.help.backendGCPBucketName": "The name of the GCP storage bucket for storing the Terraform remote state file.", - "loc.input.label.backendGCPPrefix": "Prefix of state file", - "loc.input.help.backendGCPPrefix": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "loc.messages.TerraformToolNotFound": "Failed to find terraform tool in paths" -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index 3ed267cb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index 62065c2b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index be057f7e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 706d4483..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index d629baa1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,43 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index 180fe9cb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 3227499b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index 3a734e84..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index e2ed5460..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 898c5ba2..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index f81ddca1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 34087fdb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index e6213425..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index 4801903b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index bf07e7de..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 07a5c910..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index e9fcc79e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 972b6e92..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 03e88f81..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index aadc6293..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index c0e23e4a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index c0b9668c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform validate": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 113ecc23..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 7346c224..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 6914c6d3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index c608083c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index b4fbae63..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 5d8a7a50..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 225ce264..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 5d605c3f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index 50a305c5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 45698517..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index bd7d3f8a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index e26084b3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index 3fb4c2b1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index a94c3381..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index f890dbca..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 3793391c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index 833be0ef..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 7beb8d2b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index b48d42c0..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index cc143336..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts deleted file mode 100644 index c58af31f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index ed812d33..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index f5980c2a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 76dd0ca1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index 6a1e4001..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 16c25d97..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts deleted file mode 100644 index 543cc6de..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index f9f6873d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 89a51574..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', '..', '..', '..', 'Tests', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index bf0e7984..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/L0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/L0.ts deleted file mode 100644 index 377553fb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/L0.ts +++ /dev/null @@ -1,1215 +0,0 @@ -import * as assert from 'assert'; -import * as ttm from 'azure-pipelines-task-lib/mock-test'; -import * as path from 'path'; - -describe('Terraform Test Suite', () => { - - before(() => {}); - - after(() => {}); - - /* terraform init tests */ - - it('azure init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform validate tests */ - - it('azure validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform plan tests */ - - it('azure plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzurePlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSPlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPPlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform apply tests */ - - it('azure apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 3, 'tool should have been invoked three times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform destroy tests */ - - it('azure destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* test for multiple providers */ - - it('warnIfMultipleProviders should not warn for single provider', (done: MochaDone) => { - let tp = path.join(__dirname, './MultipleProviderTests/SingleProviderNoWarning.js'); - let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); - - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - - done(); - } catch(error) { - done(error); - } - }); - - it('warnIfMultipleProviders should warn correctly for multiple providers', (done: MochaDone) => { - let tp = path.join(__dirname, './MultipleProviderTests/MultipleProviderWarning.js'); - let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); - - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 1, 'should have one warning'); - assert(tr.createdWarningIssue('Multiple provider blocks specified in the .tf files in the current working directory.'), 'Should have created warning: Multiple provider blocks specified in the .tf files in the current working drectory.'); - - done(); - } catch(error) { - done(error); - } - }); - - /* test for compareVersions method of BaseTerraformCommandHandler class */ - - it('compareVersions should compare two versions correctly', (done: MochaDone) => { - let tp = path.join(__dirname, './L0CompareVersions.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.stdOutContained('compareVersions("0.20.7", "0.20.8") should have been -1') , 'Should have printed: compareVersions("0.20.7", "0.20.8") should have been -1'+tr.stdout); - assert(tr.stdOutContained('compareVersions("0.20.9", "0.20.8") should have been 1') , 'Should have printed: compareVersions("0.20.9", "0.20.8") should have been 1'); - assert(tr.stdOutContained('compareVersions("0.2.9", "0.2.9") should have been 0') , 'Should have printed: compareVersions("0.2.9", "0.2.9") should have been 0'); - assert(tr.stdOutContained('compareVersions("0.20.9", "0.20.09") should have been 0') , 'Should have printed: compareVersions("0.20.9", "0.20.09") should have been 0'); - assert(tr.stdOutContained('compareVersions("0.21.9", "0.20.9") should have been 1') , 'Should have printed: compareVersions("0.21.9", "0.20.9") should have been 1'); - assert(tr.stdOutContained('compareVersions("1.20.10", "0.20.11") should have been 1') , 'Should have printed: compareVersions("1.20.10", "0.20.11") should have been 1'); - - done(); - } catch(error) { - done(error); - } - }); - -}); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/L0CompareVersions.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/L0CompareVersions.ts deleted file mode 100644 index ad11c078..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/L0CompareVersions.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../src/azure-terraform-command-handler'; -import tasks = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -// test cases for compareVersions -if (terraformCommandHandlerAzureRM.compareVersions("0.20.7", "0.20.8") === -1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.7", "0.20.8") should have been -1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.8") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.8") should have been 1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.2.9", "0.2.9") === 0) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.2.9", "0.2.9") should have been 0'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.09") === 0) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.09") should have been 0'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.21.9", "0.20.9") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.21.9", "0.20.9") should have been 1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("1.20.10", "0.20.11") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("1.20.10", "0.20.11") should have been 1'); -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/MultipleProviderWarning.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/MultipleProviderWarning.ts deleted file mode 100644 index 6c5a5590..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/MultipleProviderWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './MultipleProviderWarningL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm\nprovider aws\nprovider gcp" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts deleted file mode 100644 index 12e01c99..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'MultipleProviderWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/SingleProviderNoWarning.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/SingleProviderNoWarning.ts deleted file mode 100644 index ff8c8af5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/SingleProviderNoWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './SingleProviderNoWarningL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts deleted file mode 100644 index 5ddc2069..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'SingleProviderNoWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index 368d11c8..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts deleted file mode 100644 index efd077a5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index df0ae313..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 1be3287d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index a8093d6d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index 96756555..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts deleted file mode 100644 index 0e22a7e1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index c74ce224..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index e9006c46..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 1ba7c105..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 498114a1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b004e73e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts deleted file mode 100644 index f7c35e0f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider gcp" - }, - "terraform plan -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index 80d27b90..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 7aa2af6c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index bcc2bb57..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 53d49a0e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index ab786a7d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b5915831..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts deleted file mode 100644 index a77bc24b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index 2591fdfc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index 94f69ba5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index f47be4b5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 8e630331..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index 4158f2eb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts deleted file mode 100644 index 25eda041..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index d05edcf9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 186d1e3d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index c3536a8d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index dc265f90..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/package-lock.json b/Tasks/TerraformTask/TerraformTaskV3/Tests/package-lock.json deleted file mode 100644 index 35edae10..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/package-lock.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" - } - }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/Tests/package.json b/Tasks/TerraformTask/TerraformTaskV3/Tests/package.json deleted file mode 100644 index c98b53b9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/Tests/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "terraform task installer test", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git" - }, - "author": "Microsoft Corporation", - "license": "MIT", - "bugs": { - "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues" - }, - "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme", - "dependencies": { - "nock": "13.2.4" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/ThirdPartyNotices.txt b/Tasks/TerraformTask/TerraformTaskV3/ThirdPartyNotices.txt deleted file mode 100644 index 2b5f4c15..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/ThirdPartyNotices.txt +++ /dev/null @@ -1,345 +0,0 @@ - -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION -Do Not Translate or Localize - -Terraform incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. - -1. @types/mocha (https://github.com/DefinitelyTyped/DefinitelyTyped.git) -2. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -3. @types/q (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -4. azure-pipelines-task-lib (https://github.com/microsoft/azure-pipelines-task-lib) -5. minimatch (https://github.com/isaacs/minimatch) -6. Mockery (https://github.com/mfncooper/mockery) -7. Q (https://github.com/kriskowal/q) -8. semver (https://github.com/npm/node-semver/) -9. ShellJS (https://github.com/shelljs/shelljs) -10. uuid (https://www.npmjs.com/package/node-uuid) -11. balanced-match (https://github.com/juliangruber/balanced-match) -12. brace-expansion (https://github.com/juliangruber/brace-expansion) -13. concat-map (https://github.com/substack/node-concat-map) - -%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/mocha NOTICES, INFORMATION, AND LICENSE - -%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/node NOTICES, INFORMATION, AND LICENSE - -%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/q NOTICES, INFORMATION, AND LICENSE - -%% azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -========================================= -END OF azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE - -%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF minimatch NOTICES, INFORMATION, AND LICENSE - -%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyrights for code authored by Yahoo! Inc. is licensed under the following -terms: - -MIT License - - Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -========================================= -END OF Mockery NOTICES, INFORMATION, AND LICENSE - -%% Q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - - The file q.js is prefaced by the following additional third-party subcomponent information: - - /*! - * - * Copyright 2009-2012 Kris Kowal under the terms of the MIT - * license found at http://github.com/kriskowal/q/raw/master/LICENSE - * - * With parts by Tyler Close - * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found - * at http://www.opensource.org/licenses/mit-license.html - * Forked at ref_send.js version: 2009-05-11 - * - * With parts by Mark Miller - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -========================================= -END OF Q NOTICES, INFORMATION, AND LICENSE - -%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF semver NOTICES, INFORMATION, AND LICENSE - -%% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright (c) 2012, Artur Adib - All rights reserved. - - You may use this project under the terms of the New BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF ShellJS NOTICES, INFORMATION, AND LICENSE - -%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) 2010-2012 Robert Kieffer - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF uuid NOTICES, INFORMATION, AND LICENSE - -%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF balanced-match NOTICES, INFORMATION, AND LICENSE - -%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF brace-expansion NOTICES, INFORMATION, AND LICENSE - -%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) James Halliday/substack - - This software is released under the MIT license: - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF concat-map NOTICES, INFORMATION, AND LICENSE diff --git a/Tasks/TerraformTask/TerraformTaskV3/icon.png b/Tasks/TerraformTask/TerraformTaskV3/icon.png deleted file mode 100644 index 7f0bb0f4..00000000 Binary files a/Tasks/TerraformTask/TerraformTaskV3/icon.png and /dev/null differ diff --git a/Tasks/TerraformTask/TerraformTaskV3/icon.svg b/Tasks/TerraformTask/TerraformTaskV3/icon.svg deleted file mode 100644 index d270ea55..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Tasks/TerraformTask/TerraformTaskV3/make.json b/Tasks/TerraformTask/TerraformTaskV3/make.json deleted file mode 100644 index 2c63c085..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/make.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/package-lock.json b/Tasks/TerraformTask/TerraformTaskV3/package-lock.json deleted file mode 100644 index 3e89908b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/package-lock.json +++ /dev/null @@ -1,2481 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^3.3.1", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "ts-loader": "^5.2.2", - "typescript": "^4.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz", - "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==", - "dependencies": { - "minimatch": "3.0.5", - "mockery": "^1.7.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", - "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dependencies": { - "@types/node": "^10.0.3" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mockery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ==" - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==" - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dependencies": { - "get-port": "^3.1.0" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==" - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/ts-loader": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", - "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", - "dev": true, - "dependencies": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" - }, - "engines": { - "node": ">=6.11.5" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/ts-loader/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" - }, - "node_modules/typescript": { - "version": "4.5.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.5.tgz", - "integrity": "sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/package.json b/Tasks/TerraformTask/TerraformTaskV3/package.json deleted file mode 100644 index 2553a9e0..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "author": "", - "license": "ISC", - "dependencies": { - "azure-pipelines-task-lib": "^3.3.1", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "ts-loader": "^5.2.2", - "typescript": "^4.0.0" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/src/azure-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV3/src/azure-terraform-command-handler.ts deleted file mode 100644 index 8445c3dc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/src/azure-terraform-command-handler.ts +++ /dev/null @@ -1,56 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; - -export class TerraformCommandHandlerAzureRM extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "azurerm"; - } - - private setupBackend(backendServiceName: string) { - var serviceprincipalid = tasks.getEndpointAuthorizationParameter(backendServiceName, "serviceprincipalid", true); - var serviceprincipalkey = tasks.getEndpointAuthorizationParameter(backendServiceName, "serviceprincipalkey", true); - - this.backendConfig.set('storage_account_name', tasks.getInput("backendAzureRmStorageAccountName", true)); - this.backendConfig.set('container_name', tasks.getInput("backendAzureRmContainerName", true)); - this.backendConfig.set('key', tasks.getInput("backendAzureRmKey", true)); - this.backendConfig.set('resource_group_name', tasks.getInput("backendAzureRmResourceGroupName", true)); - this.backendConfig.set('subscription_id', tasks.getEndpointDataParameter(backendServiceName, "subscriptionid", true)); - this.backendConfig.set('tenant_id', tasks.getEndpointAuthorizationParameter(backendServiceName, "tenantid", true)); - - if(serviceprincipalid && serviceprincipalkey) { - this.backendConfig.set('client_id', serviceprincipalid); - this.backendConfig.set('client_secret', serviceprincipalkey); - } else { - this.backendConfig.set('use_msi', 'true'); - } - } - - public handleBackend(terraformToolRunner: ToolRunner): void { - let backendServiceName = tasks.getInput("backendServiceArm", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public handleProvider(command: TerraformAuthorizationCommandInitializer) { - if (command.serviceProvidername) { - var serviceprincipalid = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalid", true); - var serviceprincipalkey = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalkey", true); - - process.env['ARM_SUBSCRIPTION_ID'] = tasks.getEndpointDataParameter(command.serviceProvidername, "subscriptionid", false); - process.env['ARM_TENANT_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "tenantid", false); - - if(serviceprincipalid && serviceprincipalkey) { - process.env['ARM_CLIENT_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalid", true); - process.env['ARM_CLIENT_SECRET'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "serviceprincipalkey", true); - } else { - process.env['ARM_USE_MSI'] = 'true'; - } - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/src/base-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV3/src/base-terraform-command-handler.ts deleted file mode 100644 index 7d8d483e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/src/base-terraform-command-handler.ts +++ /dev/null @@ -1,279 +0,0 @@ -import {TerraformToolHandler, ITerraformToolHandler} from './terraform'; -import {ToolRunner, IExecOptions, IExecSyncOptions, IExecSyncResult} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformBaseCommandInitializer, TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import tasks = require('azure-pipelines-task-lib/task'); -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; -const fs = require('fs'); -const del = require('del'); - -export abstract class BaseTerraformCommandHandler { - providerName: string; - terraformToolHandler: ITerraformToolHandler; - backendConfig: Map; - - abstract handleBackend(terraformToolRunner: ToolRunner); - abstract handleProvider(command: TerraformAuthorizationCommandInitializer); - - constructor() { - this.providerName = ""; - this.terraformToolHandler = new TerraformToolHandler(tasks); - this.backendConfig = new Map(); - } - - public compareVersions(version1: string, version2: string) { - let versionNumbers1: string[] = version1.split('.'); - let versionNumbers2: string[] = version2.split('.'); - - const smallerLength = Math.min(versionNumbers1.length, versionNumbers2.length); - - let versionNumbersInt1: number[] = new Array(smallerLength); - let versionNumbersInt2: number[] = new Array(smallerLength); - - for (let i = 0; i < smallerLength; i++) { - versionNumbersInt1[i] = parseInt(versionNumbers1[i], 10); - versionNumbersInt2[i] = parseInt(versionNumbers2[i], 10); - if (versionNumbersInt1[i] > versionNumbersInt2[i]) return 1; - if (versionNumbersInt1[i] < versionNumbersInt2[i]) return -1; - } - - return versionNumbersInt1.length == versionNumbersInt2.length ? 0: (versionNumbersInt1.length < versionNumbersInt2.length ? -1 : 1); - } - - public warnIfMultipleProviders(): void { - let terraformPath; - try { - terraformPath = tasks.which("terraform", true); - } catch(err) { - throw new Error(tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = tasks.tool(terraformPath); - terraformToolRunner.arg("providers"); - let commandOutput = terraformToolRunner.execSync({ - cwd: tasks.getInput("workingDirectory") - }); - - let countProviders = ["aws", "azurerm", "google"].filter(provider => commandOutput.stdout.includes(provider)).length; - - tasks.debug(countProviders.toString()); - if (countProviders > 1) { - tasks.warning("Multiple provider blocks specified in the .tf files in the current working directory."); - } - } - - public getServiceProviderNameFromProviderInput(): string { - let provider: string = tasks.getInput("provider", true); - - switch (provider) { - case "azurerm": return "AzureRM"; - case "aws" : return "AWS"; - case "gcp" : return "GCP"; - } - } - - public async init(): Promise { - let initCommand = new TerraformBaseCommandInitializer( - "init", - tasks.getInput("workingDirectory"), - tasks.getInput("commandOptions") - ); - - let terraformTool; - - terraformTool = this.terraformToolHandler.createToolRunner(initCommand); - this.handleBackend(terraformTool); - - return terraformTool.exec( { - cwd: initCommand.workingDirectory - }); - } - public async show(): Promise { - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let cmd; - const outputTo = tasks.getInput("outputTo"); - const outputFormat = tasks.getInput("outputFormat"); - if (outputFormat == "json"){ - cmd = tasks.getInput("commandOptions") != null ? `-json ${tasks.getInput("commandOptions")}`:`-json`; - }else{ - cmd = tasks.getInput("commandOptions") != null ? tasks.getInput("commandOptions"):``; - } - - let showCommand = new TerraformAuthorizationCommandInitializer( - "show", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - cmd - ); - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(showCommand); - this.handleProvider(showCommand); - - if(outputTo == "console"){ - return terraformTool.exec( { - cwd: showCommand.workingDirectory}); - }else if(outputTo == "file"){ - const showFilePath = path.resolve(tasks.getInput("filename")); - let commandOutput = await terraformTool.execSync( { - cwd: showCommand.workingDirectory, - }); - - tasks.writeFile(showFilePath, commandOutput.stdout); - tasks.setVariable('showFilePath', showFilePath); - - return commandOutput; - } - } - public async output(): Promise { - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let additionalArgs: string = `-json` - let commandOptions = tasks.getInput("commandOptions") != null ? `${tasks.getInput("commandOptions")} -json`:`-json` - - let outputCommand = new TerraformAuthorizationCommandInitializer( - "output", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - commandOptions - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(outputCommand); - this.handleProvider(outputCommand); - - const jsonOutputVariablesFilePath = path.resolve(`output-${uuidV4()}.json`); - let commandOutput = await terraformTool.execSync({ - cwd: outputCommand.workingDirectory, - }); - - tasks.writeFile(jsonOutputVariablesFilePath, commandOutput.stdout); - tasks.setVariable('jsonOutputVariablesPath', jsonOutputVariablesFilePath); - - return commandOutput; - - - } - - public async plan(): Promise { - this.warnIfMultipleProviders(); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let commandOptions = tasks.getInput("commandOptions") != null ? `${tasks.getInput("commandOptions")} -detailed-exitcode`:`-detailed-exitcode` - let planCommand = new TerraformAuthorizationCommandInitializer( - "plan", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - commandOptions - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(planCommand); - this.handleProvider(planCommand); - - let result = await terraformTool.exec( { - cwd: planCommand.workingDirectory, - ignoreReturnCode: true - }); - - if (result !== 0 && result !== 2) { - throw new Error(tasks.loc("TerraformPlanFailed", result)); - } - tasks.setVariable('changesPresent', (result === 2).toString(), false, true); - return result; - } - - public async custom(): Promise { - const outputTo = tasks.getInput("outputTo"); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let customCommand = new TerraformAuthorizationCommandInitializer( - tasks.getInput("customCommand"), - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - tasks.getInput("commandOptions") - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(customCommand); - this.handleProvider(customCommand); - - - if(outputTo == "console"){ - return terraformTool.exec( { - cwd: customCommand.workingDirectory}); - }else if(outputTo == "file"){ - const customFilePath = path.resolve(tasks.getInput("filename")); - let commandOutput = await terraformTool.execSync( { - cwd: customCommand.workingDirectory}); - - tasks.writeFile(customFilePath, commandOutput.stdout); - tasks.setVariable('customFilePath', customFilePath); - return commandOutput; - } - } - - public async apply(): Promise { - let terraformTool; - this.warnIfMultipleProviders(); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let autoApprove: string = '-auto-approve'; - let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; - - if (additionalArgs.includes(autoApprove) === false) { - additionalArgs = `${autoApprove} ${additionalArgs}`; - } - - let applyCommand = new TerraformAuthorizationCommandInitializer( - "apply", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - additionalArgs - ); - - terraformTool = this.terraformToolHandler.createToolRunner(applyCommand); - this.handleProvider(applyCommand); - - return terraformTool.exec( { - cwd: applyCommand.workingDirectory - }); - } - - public async destroy(): Promise { - this.warnIfMultipleProviders(); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let autoApprove: string = '-auto-approve'; - let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; - - if (additionalArgs.includes(autoApprove) === false) { - additionalArgs = `${autoApprove} ${additionalArgs}`; - } - - let destroyCommand = new TerraformAuthorizationCommandInitializer( - "destroy", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - additionalArgs - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(destroyCommand); - this.handleProvider(destroyCommand); - - return terraformTool.exec( { - cwd: destroyCommand.workingDirectory - }); - }; - - public async validate(): Promise { - let validateCommand = new TerraformBaseCommandInitializer( - "validate", - tasks.getInput("workingDirectory"), - tasks.getInput("commandOptions") - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(validateCommand); - - - return terraformTool.exec({ - cwd: validateCommand.workingDirectory - }); - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/src/gcp-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV3/src/gcp-terraform-command-handler.ts deleted file mode 100644 index e757db8c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/src/gcp-terraform-command-handler.ts +++ /dev/null @@ -1,55 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; - -export class TerraformCommandHandlerGCP extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "gcp"; - } - - private getJsonKeyFilePath(serviceName: string) { - // Get credentials for json file - const jsonKeyFilePath = path.resolve(`credentials-${uuidV4()}.json`); - - let clientEmail = tasks.getEndpointAuthorizationParameter(serviceName, "Issuer", false); - let tokenUri = tasks.getEndpointAuthorizationParameter(serviceName, "Audience", false); - let privateKey = tasks.getEndpointAuthorizationParameter(serviceName, "PrivateKey", false); - - // Create json string and write it to the file - let jsonCredsString = `{"type": "service_account", "private_key": "${privateKey}", "client_email": "${clientEmail}", "token_uri": "${tokenUri}"}` - tasks.writeFile(jsonKeyFilePath, jsonCredsString); - - return jsonKeyFilePath; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('bucket', tasks.getInput("backendGCPBucketName", true)); - this.backendConfig.set('prefix', tasks.getInput("backendGCPPrefix", false)); - - let jsonKeyFilePath = this.getJsonKeyFilePath(backendServiceName); - - this.backendConfig.set('credentials', jsonKeyFilePath); - } - - public handleBackend(terraformToolRunner: ToolRunner): void { - let backendServiceName = tasks.getInput("backendServiceGCP", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public handleProvider(command: TerraformAuthorizationCommandInitializer) { - if (command.serviceProvidername) { - let jsonKeyFilePath = this.getJsonKeyFilePath(command.serviceProvidername); - - process.env['GOOGLE_CREDENTIALS'] = `${jsonKeyFilePath}`; - process.env['GOOGLE_PROJECT'] = tasks.getEndpointDataParameter(command.serviceProvidername, "project", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/src/index.ts b/Tasks/TerraformTask/TerraformTaskV3/src/index.ts deleted file mode 100644 index 7407a745..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/src/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ParentCommandHandler} from './parent-handler'; -import path = require('path'); - -async function run() { - tasks.setResourcePath(path.join(__dirname, '..', 'task.json')); - - let parentHandler = new ParentCommandHandler(); - try { - await parentHandler.execute(tasks.getInput("provider"), tasks.getInput("command")); - tasks.setResult(tasks.TaskResult.Succeeded, ""); - } catch (error) { - tasks.setResult(tasks.TaskResult.Failed, error); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/src/parent-handler.ts b/Tasks/TerraformTask/TerraformTaskV3/src/parent-handler.ts deleted file mode 100644 index 5f94bba5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/src/parent-handler.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { BaseTerraformCommandHandler } from './base-terraform-command-handler'; -import { TerraformCommandHandlerAzureRM } from './azure-terraform-command-handler'; -import { TerraformCommandHandlerAWS } from './aws-terraform-command-handler'; -import { TerraformCommandHandlerGCP } from './gcp-terraform-command-handler'; - -export interface IParentCommandHandler { - execute(providerName: string, command: string): Promise; -} - -export class ParentCommandHandler implements IParentCommandHandler { - public async execute(providerName: string, command: string): Promise { - // Create corresponding command handler according to provider name - let provider: BaseTerraformCommandHandler; - - switch(providerName) { - case "azurerm": - provider = new TerraformCommandHandlerAzureRM(); - break; - - case "aws": - provider = new TerraformCommandHandlerAWS(); - break; - - case "gcp": - provider = new TerraformCommandHandlerGCP(); - break; - } - - // Run the corrresponding command according to command name - return await provider[command](); - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/src/terraform-commands.ts b/Tasks/TerraformTask/TerraformTaskV3/src/terraform-commands.ts deleted file mode 100644 index d95b2a23..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/src/terraform-commands.ts +++ /dev/null @@ -1,29 +0,0 @@ -export class TerraformBaseCommandInitializer { - public readonly name: string; - public readonly workingDirectory: string; - public readonly additionalArgs: string | undefined; - - constructor( - name: string, - workingDirectory: string, - additionalArgs?: string | undefined - ) { - this.name = name; - this.workingDirectory = workingDirectory; - this.additionalArgs = additionalArgs; - } -} - -export class TerraformAuthorizationCommandInitializer extends TerraformBaseCommandInitializer { - readonly serviceProvidername: string; - - constructor( - name: string, - workingDirectory: string, - serviceProvidername: string, - additionalArgs?: string | undefined - ) { - super(name, workingDirectory, additionalArgs); - this.serviceProvidername = serviceProvidername; - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV3/src/terraform.ts b/Tasks/TerraformTask/TerraformTaskV3/src/terraform.ts deleted file mode 100644 index 59ea03a6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/src/terraform.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner' -import { TerraformBaseCommandInitializer } from './terraform-commands' - -export interface ITerraformToolHandler { - createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner; -} - -export class TerraformToolHandler implements ITerraformToolHandler { - private readonly tasks: any; - - constructor(tasks: any) { - this.tasks = tasks; - } - - public createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner { - let terraformPath; - try { - terraformPath = this.tasks.which("terraform", true); - } catch(err) { - throw new Error(this.tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = this.tasks.tool(terraformPath); - if (command) { - terraformToolRunner.arg(command.name); - if (command.additionalArgs) { - terraformToolRunner.line(command.additionalArgs); - } - } - - return terraformToolRunner; - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/task.json b/Tasks/TerraformTask/TerraformTaskV3/task.json deleted file mode 100644 index 9563d8f5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/task.json +++ /dev/null @@ -1,314 +0,0 @@ -{ - "id": "FE504ACC-6115-40CB-89FF-191386B5E7BF", - "name": "TerraformTaskV3", - "friendlyName": "Terraform", - "description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", - "author": "Microsoft Corporation", - "helpMarkDown": "[Learn more about this task](https://aka.ms/AAf0uqr)", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "3", - "Minor": "209", - "Patch": "0" - }, - "instanceNameFormat": "Terraform : $(provider)", - "execution": { - "Node10": { - "target": "src/index.js" - } - }, - "groups": [ - { - "name": "backendAzureRm", - "displayName": "AzureRM backend configuration", - "isExpanded": true, - "visibleRule": "provider = azurerm && command = init" - }, - { - "name": "backendAWS", - "displayName": "Amazon Web Services(AWS) backend configuration", - "isExpanded": true, - "visibleRule": "provider = aws && command = init" - }, - { - "name": "backendGCP", - "displayName": "Google Cloud Platform(GCP) backend configuration", - "isExpanded": true, - "visibleRule": "provider = gcp && command = init" - } - ], - "inputs": [{ - "name": "provider", - "type": "picklist", - "label": "Provider", - "defaultValue": "azurerm", - "required": true, - "helpMarkDown": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", - "options": { - "azurerm": "azurerm", - "aws": "aws", - "gcp": "gcp" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "command", - "type": "pickList", - "label": "Command", - "defaultValue": "init", - "required": true, - "helpMarkDown": "The terraform command to execute.", - "options": { - "init": "init", - "validate": "validate", - "plan": "plan", - "show": "show", - "apply": "apply", - "output": "output", - "destroy": "destroy", - "custom": "custom" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "workingDirectory", - "type": "filePath", - "label": "Configuration directory", - "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", - "required": false - }, - { - "name": "commandOptions", - "type": "string", - "label": "Additional command arguments", - "helpMarkDown": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", - "required": false - }, { - "name": "outputTo", - "type": "pickList", - "label": "Output to", - "defaultValue": "console", - "visibleRule": "command = show || command = custom", - "helpMarkDown": "choose output to file or console. ", - "options": { - "file": "file", - "console": "console" - }, - "required": true - }, - { - "name": "customCommand", - "type": "string", - "label": "Custom command", - "visibleRule": "command = custom", - "helpMarkDown": "The custom terraform command to execute.", - "required": true - }, - { - "name": "outputFormat", - "type": "pickList", - "label": "Output format", - "defaultValue": "default", - "visibleRule": "command = show", - "helpMarkDown": "choose format of ouput for show cmd. ", - "options": { - "json": "json", - "default": "default" - }, - "required": true - }, - { - "name": "fileName", - "type": "string", - "label": "Output Filename", - "visibleRule": "outputTo = file", - "required": true, - "helpMarkDown": "filename of output" - - }, - { - "name": "environmentServiceNameAzureRM", - "type": "connectedService:AzureRM", - "label": "Azure subscription", - "required": true, - "visibleRule": "provider = azurerm && command != init && command != validate", - "helpMarkDown": "Select an Azure Resource Manager subscription for the deployment" - }, - { - "name": "environmentServiceNameAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "Amazon Web Services connection", - "required": true, - "visibleRule": "provider = aws && command != init && command != validate", - "helpMarkDown": "Select an Amazon Web Services connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button." - }, - { - "name": "environmentServiceNameGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "Google Cloud Platform connection", - "required": true, - "visibleRule": "provider = gcp && command != init && command != validate", - "helpMarkDown": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button." - }, - { - "name": "backendServiceArm", - "type": "connectedService:AzureRM", - "label": "Azure subscription", - "required": true, - "helpMarkDown": "Azure resource manager subscription for the terraform backend configuration", - "groupName": "backendAzureRm" - }, - { - "name": "backendAzureRmResourceGroupName", - "type": "pickList", - "label": "Resource group", - "required": true, - "helpMarkDown": "The name of the resource group which contains the storage account selected below.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmStorageAccountName", - "type": "pickList", - "label": "Storage account", - "required": true, - "helpMarkDown": "The name of the storage account which contains the Azure Blob container selected below.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmContainerName", - "type": "pickList", - "label": "Container", - "required": true, - "helpMarkDown": "The name of the Azure Blob container in which to store the Terraform remote state file.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmKey", - "type": "string", - "label": "Key", - "required": true, - "helpMarkDown": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", - "groupName": "backendAzureRm" - }, - { - "name": "backendServiceAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "Amazon Web Services connection", - "required": true, - "helpMarkDown": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "groupName": "backendAWS" - }, - { - "name": "backendAWSBucketName", - "type": "pickList", - "label": "Bucket", - "required": true, - "helpMarkDown": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", - "groupName": "backendAWS", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAWSKey", - "type": "string", - "label": "Key", - "required": true, - "helpMarkDown": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", - "groupName": "backendAWS" - }, - { - "name": "backendServiceGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "Google Cloud Platform connection", - "required": true, - "helpMarkDown": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "groupName": "backendGCP" - }, - { - "name": "backendGCPBucketName", - "type": "pickList", - "label": "Bucket", - "required": true, - "helpMarkDown": "The name of the GCP storage bucket for storing the Terraform remote state file.", - "groupName": "backendGCP", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendGCPPrefix", - "type": "string", - "label": "Prefix of state file", - "required": false, - "helpMarkDown": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "groupName": "backendGCP" - } - ], - "dataSourceBindings": [ - { - "target": "backendAzureRmResourceGroupName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourcegroups?api-version=2019-05-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmStorageAccountName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmContainerName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$(backendAzureRmStorageAccountName)/blobServices/default/containers?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAWSBucketName", - "endpointId": "$(backendServiceAWS)", - "dataSourceName": "AWS" - }, - { - "target": "backendGCPBucketName", - "endpointId": "$(backendServiceGCP)", - "dataSourceName": "GCP" - } - ], - "outputVariables": [ - { - "name": "jsonPlanFilePath", - "description": "The location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." - }, - { - "name": "jsonOutputVariablesPath", - "description": "The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'output'." - }, - { - "name": "changesPresent", - "description": "A boolean indicating if the terraform plan found any changes to apply." - } - ], - "messages": { - "TerraformToolNotFound": "Failed to find terraform tool in paths" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV3/task.loc.json b/Tasks/TerraformTask/TerraformTaskV3/task.loc.json deleted file mode 100644 index 9d3d0397..00000000 --- a/Tasks/TerraformTask/TerraformTaskV3/task.loc.json +++ /dev/null @@ -1,316 +0,0 @@ -{ - "id": "FE504ACC-6115-40CB-89FF-191386B5E7BF", - "name": "TerraformTaskV3", - "friendlyName": "ms-resource:loc.friendlyName", - "description": "ms-resource:loc.description", - "author": "Microsoft Corporation", - "helpMarkDown": "ms-resource:loc.helpMarkDown", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "demands": [], - "version": { - "Major": "3", - "Minor": "209", - "Patch": "0" - }, - "instanceNameFormat": "ms-resource:loc.instanceNameFormat", - "execution": { - "Node10": { - "target": "src/index.js" - } - }, - "groups": [ - { - "name": "backendAzureRm", - "displayName": "ms-resource:loc.group.displayName.backendAzureRm", - "isExpanded": true, - "visibleRule": "provider = azurerm && command = init" - }, - { - "name": "backendAWS", - "displayName": "ms-resource:loc.group.displayName.backendAWS", - "isExpanded": true, - "visibleRule": "provider = aws && command = init" - }, - { - "name": "backendGCP", - "displayName": "ms-resource:loc.group.displayName.backendGCP", - "isExpanded": true, - "visibleRule": "provider = gcp && command = init" - } - ], - "inputs": [ - { - "name": "provider", - "type": "picklist", - "label": "ms-resource:loc.input.label.provider", - "defaultValue": "azurerm", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.provider", - "options": { - "azurerm": "azurerm", - "aws": "aws", - "gcp": "gcp" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "command", - "type": "pickList", - "label": "ms-resource:loc.input.label.command", - "defaultValue": "init", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.command", - "options": { - "init": "init", - "validate": "validate", - "plan": "plan", - "show": "show", - "apply": "apply", - "output": "output", - "destroy": "destroy", - "custom": "custom" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "workingDirectory", - "type": "filePath", - "label": "ms-resource:loc.input.label.workingDirectory", - "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "ms-resource:loc.input.help.workingDirectory", - "required": false - },{ - "name": "customCommand", - "type": "string", - "visibleRule": "command = custom", - "label": "ms-resource:loc.input.label.customCommand", - "helpMarkDown": "ms-resource:loc.input.help.customCommand", - "required": true - }, - { - "name": "commandOptions", - "type": "string", - "label": "ms-resource:loc.input.label.commandOptions", - "helpMarkDown": "ms-resource:loc.input.help.commandOptions", - "required": false - }, - - { - "name": "outputTo", - "type": "pickList", - "label": "ms-resource:loc.input.label.outputTo", - "defaultValue": "console", - "visibleRule": "command = show || command = custom", - "helpMarkDown": "ms-resource:loc.input.help.outputTo", - "options": { - "file": "file", - "console": "console" - }, - "required": true - }, - { - "name": "outputFormat", - "type": "pickList", - "label": "ms-resource:loc.input.label.outputFormat", - "defaultValue": "default", - "visibleRule": "command = show", - "helpMarkDown": "ms-resource:loc.input.help.outputFormat", - "options": { - "json": "json", - "default": "default" - }, - "required": true - }, - { - "name": "fileName", - "type": "string", - "label": "ms-resource:loc.input.label.fileName", - "visibleRule": "outputTo = file", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.fileName" - - }, - { - "name": "environmentServiceNameAzureRM", - "type": "connectedService:AzureRM", - "label": "ms-resource:loc.input.label.environmentServiceNameAzureRM", - "required": true, - "visibleRule": "provider = azurerm && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameAzureRM" - }, - { - "name": "environmentServiceNameAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "ms-resource:loc.input.label.environmentServiceNameAWS", - "required": true, - "visibleRule": "provider = aws && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameAWS" - }, - { - "name": "environmentServiceNameGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "ms-resource:loc.input.label.environmentServiceNameGCP", - "required": true, - "visibleRule": "provider = gcp && command != init && command != validate", - "helpMarkDown": "ms-resource:loc.input.help.environmentServiceNameGCP" - }, - { - "name": "backendServiceArm", - "type": "connectedService:AzureRM", - "label": "ms-resource:loc.input.label.backendServiceArm", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceArm", - "groupName": "backendAzureRm" - }, - { - "name": "backendAzureRmResourceGroupName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmResourceGroupName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmResourceGroupName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmStorageAccountName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmStorageAccountName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmStorageAccountName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmContainerName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAzureRmContainerName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmContainerName", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmKey", - "type": "string", - "label": "ms-resource:loc.input.label.backendAzureRmKey", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAzureRmKey", - "groupName": "backendAzureRm" - }, - { - "name": "backendServiceAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "ms-resource:loc.input.label.backendServiceAWS", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceAWS", - "groupName": "backendAWS" - }, - { - "name": "backendAWSBucketName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendAWSBucketName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAWSBucketName", - "groupName": "backendAWS", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAWSKey", - "type": "string", - "label": "ms-resource:loc.input.label.backendAWSKey", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendAWSKey", - "groupName": "backendAWS" - }, - { - "name": "backendServiceGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "ms-resource:loc.input.label.backendServiceGCP", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendServiceGCP", - "groupName": "backendGCP" - }, - { - "name": "backendGCPBucketName", - "type": "pickList", - "label": "ms-resource:loc.input.label.backendGCPBucketName", - "required": true, - "helpMarkDown": "ms-resource:loc.input.help.backendGCPBucketName", - "groupName": "backendGCP", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendGCPPrefix", - "type": "string", - "label": "ms-resource:loc.input.label.backendGCPPrefix", - "required": false, - "helpMarkDown": "ms-resource:loc.input.help.backendGCPPrefix", - "groupName": "backendGCP" - } - ], - "dataSourceBindings": [ - { - "target": "backendAzureRmResourceGroupName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourcegroups?api-version=2019-05-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmStorageAccountName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmContainerName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$(backendAzureRmStorageAccountName)/blobServices/default/containers?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAWSBucketName", - "endpointId": "$(backendServiceAWS)", - "dataSourceName": "AWS" - }, - { - "target": "backendGCPBucketName", - "endpointId": "$(backendServiceGCP)", - "dataSourceName": "GCP" - } - ], - "outputVariables": [ - { - "name": "jsonPlanFilePath", - "description": "The location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." - }, - { - "name": "jsonOutputVariablesPath", - "description": "The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'apply'." - }, - { - "name": "changesPresent", - "description": "A boolean indicating if the terraform plan found any changes to apply." - } - ], - "messages": { - "TerraformToolNotFound": "ms-resource:loc.messages.TerraformToolNotFound" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/README.md b/Tasks/TerraformTask/TerraformTaskV4/README.md deleted file mode 100644 index 7bdd73a3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# Terraform : Provision infrastructure on Azure, Amazon Web Services(AWS) and Google Cloud Platform(GCP) using the terraform command-line - - -## Overview - -This task enables running Terraform commands as part of Azure Build and Release Pipelines. It supports the following Terraform commands -- init -- validate -- plan -- apply -- destroy -- show -- output -- custom - -The following providers are currently supported: -- AzureRM -- Amazon Web Services -- Google Cloud Platform - - -## Contact Information - -Please report a problem at [Developer Community Forum](https://developercommunity.visualstudio.com/spaces/21/index.html) if you are facing problems in making this task work. You can also share feedback about the task like, what more functionality should be added to the task, what other tasks you would like to have, at the same place. - - -## Pre-requisites for the task - - -The only pre-requisite for the task is that Terraform must be installed on the Azure Pipelines build agent. If you want an exact version of Terraform on the agent then you can use the [Terraform tool installer task](https://aka.ms/AAf1a0p). Terraform Task V4 supports `terraform >= 0.12`. - - -## Parameters of the task - -- **Display name\*:** Provide a name to identify the task among others in your pipeline. - -- **Provider\*:** Select the provider in which your resources will be managed by Terraform. Currently, the following providers are supported: - - azurerm - - aws - - gcp - -- **Command\*:** Select the terraform command to execute. Currently, the following commands are supported: - - init - - validate - - plan - - apply - - destroy - - show - - output - - custom - -- **Configuration directory\*:** Select the directory that contains all the relevant terraform config (.tf) files. The task intends to use Terraform to build infrastructure on one provider at a time. So, all the config files in the configuration directory together should not specify more than one provider. - -- **Additional command arguments\*:** Provide any additional arguments for the selected command either as key-value pairs(-key=value) or as command line flags(-flag). Multiple options can also be provided delimited by spaces(-key1=value1 -key2=value2 -flag1 -flag2). - -Examples: - - -out=tfplan (for terraform plan) - - tfplan -auto-approve (for terraform apply) - -Options specific to **terraform init** command - -- Options specific to **AzureRM backend configuration** - - **Azure Backend Service Connection\*:** Select the Azure Service Connection to use for AzureRM backend configuration - - **Resource group\*:** Select the name of the resource group in which you want to store the terraform remote state file - - **Storage account\*:** Select the name of the storage account belonging to the selected resource group in which you want to store the terraform remote state file - - **Container\*:** Select the name of the Azure Blob container belonging to the storage account in which you want to store the terraform remote state file - - **Key\*:** Specify the relative path to the state file inside the selected container. For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input "tf/terraform.tfstate" - - **Use Env Vars for Authentication\*:** Choose whether to use environment variables for azurerm backend authentication. If selected, the principal details will be created as environment variables for 'ARM_CLIENT_ID' and 'ARM_CLIENT_SECRET' or 'ARM_OIDC_TOKEN'. - - **Use Entra ID for Authentication\*:** Choose whether to use Entra Id authentication to the storage account. If selected, 'use_azuread_auth = true' will be passed to the backend config. - -- Options specific to **Amazon Web Services(AWS) backend configuration** - - **Amazon Web Services connection\*:** Select the AWS connection to use for AWS backend configuration - - **Bucket\*:** Select the name of the Amazon S3 bucket in which you want to store the terraform remote state file - - **Key\*:** Specify the relative path to the state file inside the selected S3 bucket. For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input "tf/terraform.tfstate" - -- Options specific to **Google Cloud Platform(GCP) backend configuration** - - **Google Cloud Platform connection\*:** Select the GCP connection to use for GCP backend configuration - - **Bucket\*:** Select the name of the GCP storage bucket in which you want to store the terraform remote state file - - **Prefix of state file:** Specify the relative path to the state file inside the GCP bucket. For example, if you give the input as "terraform", then the state file, named default.tfstate, will be stored inside an object called terraform. - -Options specific to **terraform plan, apply, show, output, custom and destroy** commands - -- **Azure Provider Service Connection (only if "azurerm" provider is selected)\*:** Select the AzureRM Service Connection to use for managing the resources used by the plan, apply, show, output, custom and destroy commands -- **Amazon Web Services connection (only if "aws" provider is selected)\*:** Select the AWS connection to use for managing the resources used by the plan, apply, show, output, custom and destroy commands -- **Google Cloud Platform connection (only if "gcp" provider is selected)\*:** Select the GCP connection to use for managing the resources used by the plan, apply, show, output, custom and destroy commands - -Options specific to **show** -- **outputTo\*:** (console or file). You can choose to save output to file or only show output in console (i.e log) -- **outputFormat\*:** (json or default) . Output in json or default format - -Options specific to **custom** -When selecting custom you can use any command that is supported natively by terraform. -- **customCommand\*:** pass any command that is supported natively by terraform -- **outputTo\*:** (console or file).You can choose to save output to file or only show output in console (i.e log) - -## Output Variables -* **changesPresent:** This variable is set to true if the plan command finds changes to apply. Can be used by subsequent tasks. Give the producing task a reference name. Then, in a downstream step, you can use the form $(\.changesPresent) to refer to it. - -* **customFilePath:** This variable refers to the location of the file that was created with use of the 'custom' command.

Note: This variable will only be set if 'command' input is set to 'custom' and if you select **outputTo\*:** 'file'. - -* **showFilePath:** This variable refers to the location of the file that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'show'. -* **jsonOutputVariablesPath:** The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'output'. - -## Example Task Usage -Below is a basic example usage of a few commands within the TerraformTaskV4 task. - -```yaml -- task: TerraformTaskV4@4 - displayName: Initialize Terraform - inputs: - provider: 'azurerm' - command: 'init' - backendServiceArm: 'your-backend-service-connection' - backendAzureRmResourceGroupName: 'your-rg-name' - backendAzureRmStorageAccountName: 'your-stg-name' - backendAzureRmContainerName: 'your-container-name' - backendAzureRmKey: 'state.tfstate' - -- task: TerraformTaskV4@4 - name: terraformPlan - displayName: Create Terraform Plan - inputs: - provider: 'azurerm' - command: 'plan' - commandOptions: '-out main.tfplan' - environmentServiceNameAzureRM: 'your-environment-service-connection' - -# Only runs if the 'terraformPlan' task has detected changes the in state. -- task: TerraformTaskV4@4 - displayName: Apply Terraform Plan - condition: and(succeeded(), eq(variables['terraformPlan.changesPresent'], 'true')) - inputs: - provider: 'azurerm' - command: 'apply' - commandOptions: 'main.tfplan' - environmentServiceNameAzureRM: 'your-environment-service-connection' -``` diff --git a/Tasks/TerraformTask/TerraformTaskV4/Strings/resources.resjson/en-US/resources.resjson b/Tasks/TerraformTask/TerraformTaskV4/Strings/resources.resjson/en-US/resources.resjson deleted file mode 100644 index 529dd992..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Strings/resources.resjson/en-US/resources.resjson +++ /dev/null @@ -1,54 +0,0 @@ -{ - "loc.friendlyName": "Terraform", - "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/AAf0uqr)", - "loc.description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS) and Google Cloud Platform(GCP)", - "loc.instanceNameFormat": "Terraform : $(provider)", - "loc.group.displayName.backendAzureRm": "AzureRM backend configuration", - "loc.group.displayName.backendAWS": "Amazon Web Services(AWS) backend configuration", - "loc.group.displayName.backendGCP": "Google Cloud Platform(GCP) backend configuration", - "loc.input.label.provider": "Provider", - "loc.input.help.provider": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", - "loc.input.label.command": "Command", - "loc.input.help.command": "The terraform command to execute.", - "loc.input.label.customCommand": "Custom command", - "loc.input.help.customCommand": "The custom terraform command to execute.", - "loc.input.label.workingDirectory": "Configuration directory", - "loc.input.help.workingDirectory": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", - "loc.input.label.commandOptions": "Additional command arguments", - "loc.input.help.commandOptions": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", - "loc.input.label.outputTo": "Output to", - "loc.input.help.outputTo": "choose output to file or console. ", - "loc.input.label.fileName": "Filename", - "loc.input.help.fileName": "filename of output", - "loc.input.label.outputFormat": "Output format", - "loc.input.help.outputFormat": "choose format of console ouput for show cmd.", - "loc.input.label.environmentServiceNameAzureRM": "Azure subscription", - "loc.input.help.environmentServiceNameAzureRM": "Select an Azure Resource Manager subscription for the deployment", - "loc.input.label.environmentServiceNameAWS": "Amazon Web Services connection", - "loc.input.help.environmentServiceNameAWS": "Select an Amazon Web Services connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "loc.input.label.environmentServiceNameGCP": "Google Cloud Platform connection", - "loc.input.help.environmentServiceNameGCP": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendServiceArm": "Azure subscription", - "loc.input.help.backendServiceArm": "Azure resource manager subscription for the terraform backend configuration", - "loc.input.label.backendAzureRmResourceGroupName": "Resource group", - "loc.input.help.backendAzureRmResourceGroupName": "The name of the resource group which contains the storage account selected below.", - "loc.input.label.backendAzureRmStorageAccountName": "Storage account", - "loc.input.help.backendAzureRmStorageAccountName": "The name of the storage account which contains the Azure Blob container selected below.", - "loc.input.label.backendAzureRmContainerName": "Container", - "loc.input.help.backendAzureRmContainerName": "The name of the Azure Blob container in which to store the Terraform remote state file.", - "loc.input.label.backendAzureRmKey": "Key", - "loc.input.help.backendAzureRmKey": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", - "loc.input.label.backendServiceAWS": "Amazon Web Services connection", - "loc.input.help.backendServiceAWS": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendAWSBucketName": "Bucket", - "loc.input.help.backendAWSBucketName": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", - "loc.input.label.backendAWSKey": "Key", - "loc.input.help.backendAWSKey": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", - "loc.input.label.backendServiceGCP": "Google Cloud Platform connection", - "loc.input.help.backendServiceGCP": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "loc.input.label.backendGCPBucketName": "Bucket", - "loc.input.help.backendGCPBucketName": "The name of the GCP storage bucket for storing the Terraform remote state file.", - "loc.input.label.backendGCPPrefix": "Prefix of state file", - "loc.input.help.backendGCPPrefix": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "loc.messages.TerraformToolNotFound": "Failed to find terraform tool in paths" -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index ef759eb8..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 409cf54a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index 8ca34089..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 6cb009f9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 30407512..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 65bc1228..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 3019f97f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index 9b3e5201..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 733094cc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index a80022ed..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 3227499b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index fd9f64f0..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index e2ed5460..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index f90ab093..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index f81ddca1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index e6213425..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts deleted file mode 100644 index c34878a2..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); -import { TokenGenerator } from './../../../src/id-token-generator'; - -let tp = path.join(__dirname, './AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'WorkloadIdentityFederation'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -var mock = { - "generateIdToken" : function(command) { return Promise.resolve('12345'); } -} - -tr.registerMock('./id-token-generator', mock); -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index fd731d5c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 38012d68..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts deleted file mode 100644 index 9fb48999..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplyFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 07a5c910..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts deleted file mode 100644 index a863ead9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 972b6e92..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 196e047a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index c0e23e4a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts deleted file mode 100644 index 4b26fb09..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 113ecc23..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ApplyTests/GCP/GCPApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index e9c17e68..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 7346c224..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 6914c6d3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index c608083c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 2de65535..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index b4fbae63..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index b3b6c2b1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index db2b4532..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index a8b0a0bd..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 5d8a7a50..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 225ce264..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 5d605c3f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 31025690..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 5e8130ef..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index 50a305c5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 45698517..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index bd7d3f8a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 3858407c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index ff5551fa..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 76dfd68a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 6806eb89..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index e26084b3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index 3fb4c2b1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index ecb87946..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index a94c3381..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index f890dbca..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts deleted file mode 100644 index add6a6eb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 3793391c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index 833be0ef..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 7beb8d2b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 0cb83317..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 8523a416..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index b48d42c0..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index cc143336..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts deleted file mode 100644 index c58af31f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 17a2a463..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts deleted file mode 100644 index c7f4d6c3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ManagedServiceIdentity'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=use_msi=true": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -var mock = { - "generateIdToken" : function(command) { return Promise.resolve('12345'); } - } - -tr.registerMock('./id-token-generator', mock); -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts deleted file mode 100644 index 7ffb55f0..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.ts +++ /dev/null @@ -1,46 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); -tr.setInput('backendAzureRmUseEnvironmentVariablesForAuthentication', 'true'); -tr.setInput('backendAzureRmUseEntraIdForAuthentication', 'true'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ManagedServiceIdentity'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=use_azuread_auth=true -backend-config=use_msi=true": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -var mock = { - "generateIdToken" : function(command) { return Promise.resolve('12345'); } - } - -tr.registerMock('./id-token-generator', mock); -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts deleted file mode 100644 index 0b8a168a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts deleted file mode 100644 index 233c04ec..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.ts +++ /dev/null @@ -1,45 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'WorkloadIdentityFederation'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=oidc_token=12345 -backend-config=use_oidc=true": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -var mock = { - "generateIdToken" : function(command) { return Promise.resolve('12345'); } - } - -tr.registerMock('./id-token-generator', mock); -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts deleted file mode 100644 index e42b76fa..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.ts +++ /dev/null @@ -1,47 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); -tr.setInput('backendAzureRmUseEnvironmentVariablesForAuthentication', 'true'); -tr.setInput('backendAzureRmUseEntraIdForAuthentication', 'true'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'WorkloadIdentityFederation'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=use_azuread_auth=true -backend-config=use_oidc=true": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -var mock = { - "generateIdToken" : function(command) { return Promise.resolve('12345'); } - } - -tr.registerMock('./id-token-generator', mock); -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts deleted file mode 100644 index 13de5841..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index ed812d33..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 44a4b635..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts deleted file mode 100644 index b182f68e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessLowerCaseAuthenticationSchemeL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'serviceprincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts deleted file mode 100644 index d863d631..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessMalformedAuthenticationSchemeL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'randomStringToSimulateMalformedScheme'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts deleted file mode 100644 index 1e1b9200..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessMissingAuthenticationSchemeL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = ''; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index f5980c2a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,42 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=client_id=DummyServicePrincipalId -backend-config=client_secret=DummyServicePrincipalKey": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts deleted file mode 100644 index 61512780..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceArm', 'AzureRM'); -tr.setInput('backendAzureRmResourceGroupName', 'DummyResourceGroup'); -tr.setInput('backendAzureRmStorageAccountName', 'DummyStorageAccount'); -tr.setInput('backendAzureRmContainerName', 'DummyContainer'); -tr.setInput('backendAzureRmKey', 'DummyKey'); -tr.setInput('backendAzureRmUseEnvironmentVariablesForAuthentication', 'true'); -tr.setInput('backendAzureRmUseEntraIdForAuthentication', 'true'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=storage_account_name=DummyStorageAccount -backend-config=container_name=DummyContainer -backend-config=key=DummyKey -backend-config=resource_group_name=DummyResourceGroup -backend-config=subscription_id=DummmySubscriptionId -backend-config=tenant_id=DummyTenantId -backend-config=use_azuread_auth=true": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts deleted file mode 100644 index 18c19c1c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 76dd0ca1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/Azure/AzureInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index 1ee7e7ff..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 16c25d97..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts deleted file mode 100644 index c1d6363c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 59da6103..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index 39630523..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 79244a86..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 1084b72f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,44 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceGCP', 'GCP'); -tr.setInput('backendGCPBucketName', 'DummyBucket'); -tr.setInput('backendGCPPrefix', 'DummyPrefix'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let credentialsFilePath = path.join(__dirname, '..', '..', '..', 'credentials-123.json'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - [`terraform init -backend-config=bucket=DummyBucket -backend-config=prefix=DummyPrefix -backend-config=credentials=${credentialsFilePath}`]: { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.registerMock('uuid/v4', () => '123'); -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index bf0e7984..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/L0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/L0.ts deleted file mode 100644 index 12a377ee..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/L0.ts +++ /dev/null @@ -1,1399 +0,0 @@ -import * as assert from 'assert'; -import * as ttm from 'azure-pipelines-task-lib/mock-test'; -import * as path from 'path'; - -describe('Terraform Test Suite', () => { - - before(() => { - //NOTE: This is here because when debugging in VSCode this is populated and the spawn() method in the testing framework which starts a new NodeJS process does not handle the path with spaces that is set in it. - delete process.env.NODE_OPTIONS - }); - - after(() => {}); - - /* terraform init tests */ - - it('azure init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with no additional args and default settings', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessNoAdditionalArgsAndDefaultSettings.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessNoAdditionalArgsAndDefaultSettingsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with lower case authentication scheme', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationScheme.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessLowerCaseAuthenticationSchemeL0 should have succeeded.'), 'Should have printed: AzureInitSuccessLowerCaseAuthenticationSchemeL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with missing authentication scheme', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessMissingAuthenticationScheme.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessMissingAuthenticationSchemeL0 should have succeeded.'), 'Should have printed: AzureInitSuccessMissingAuthenticationSchemeL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - - it('azure init should succeed with malformed authentication scheme', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessMalformedAuthenticationScheme.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessMalformedAuthenticationSchemeL0 should have succeeded.'), 'Should have printed: AzureInitSuccessMalformedAuthenticationSchemeL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with authentication scheme ManagedServiceIdentity', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentity.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded.'), 'Should have printed: AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with authentication scheme ManagedServiceIdentity and DefaultSettings', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettings.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with authentication scheme WorkloadIdentityFederation', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederation.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'), 'Should have printed: AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with authentication scheme WorkloadIdentityFederation and default settings', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettings.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/Azure/AzureInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/AWS/AWSInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPInitSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp init should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './InitTests/GCP/GCPInitFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed.'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform validate tests */ - - it('azure validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should succeed with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'), 'Should have printed: GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp validate should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 1, 'tool should have been invoked one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform plan tests */ - - it('azure plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzurePlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSPlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should succeed with additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanSuccessAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPPlanSuccessAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp plan should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform apply tests */ - - it('azure apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with authentication scheme ManagedServiceIdentity', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with authentication scheme WorkloadIdentityFederation', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederation.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AzureApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPApplySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: GCPApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp apply should fail with empty working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './ApplyTests/GCP/GCPApplyFailEmptyWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Error: No configuration files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* terraform destroy tests */ - - it('azure destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('azure destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('aws destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with no additional args', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with additional args with -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should succeed with additional args without -auto-approve', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'), 'Should have printed: GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - - done(); - } catch(error) { - done(error); - } - }); - - it('gcp destroy should fail with invalid working directory', (done: MochaDone) => { - let tp = path.join(__dirname, './DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.failed, 'task should have failed'); - assert(tr.invokedToolCount === 2, 'tool should have been invoked two times. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 1, 'should have one error'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - assert(tr.stdOutContained('Execution failed: invalid config files'), 'Should have shown error message'); - - done(); - } catch(error) { - done(error); - } - }); - - /* test for multiple providers */ - - it('warnIfMultipleProviders should not warn for single provider', (done: MochaDone) => { - let tp = path.join(__dirname, './MultipleProviderTests/SingleProviderNoWarning.js'); - let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); - - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 0, 'should have no warnings'); - - done(); - } catch(error) { - done(error); - } - }); - - it('warnIfMultipleProviders should warn correctly for multiple providers', (done: MochaDone) => { - let tp = path.join(__dirname, './MultipleProviderTests/MultipleProviderWarning.js'); - let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); - - try { - tr.run(); - - assert(tr.succeeded, 'task should have succeeded'); - assert(tr.invokedToolCount === 1, 'should have invoked tool one time. actual: ' + tr.invokedToolCount); - assert(tr.errorIssues.length === 0, 'should have no errors'); - assert(tr.warningIssues.length === 1, 'should have one warning'); - assert(tr.createdWarningIssue('Multiple provider blocks specified in the .tf files in the current working directory.'), 'Should have created warning: Multiple provider blocks specified in the .tf files in the current working drectory.'); - - done(); - } catch(error) { - done(error); - } - }); - - /* test for compareVersions method of BaseTerraformCommandHandler class */ - - it('compareVersions should compare two versions correctly', (done: MochaDone) => { - let tp = path.join(__dirname, './L0CompareVersions.js'); - let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); - try { - tr.run(); - - assert(tr.stdOutContained('compareVersions("0.20.7", "0.20.8") should have been -1') , 'Should have printed: compareVersions("0.20.7", "0.20.8") should have been -1'+tr.stdout); - assert(tr.stdOutContained('compareVersions("0.20.9", "0.20.8") should have been 1') , 'Should have printed: compareVersions("0.20.9", "0.20.8") should have been 1'); - assert(tr.stdOutContained('compareVersions("0.2.9", "0.2.9") should have been 0') , 'Should have printed: compareVersions("0.2.9", "0.2.9") should have been 0'); - assert(tr.stdOutContained('compareVersions("0.20.9", "0.20.09") should have been 0') , 'Should have printed: compareVersions("0.20.9", "0.20.09") should have been 0'); - assert(tr.stdOutContained('compareVersions("0.21.9", "0.20.9") should have been 1') , 'Should have printed: compareVersions("0.21.9", "0.20.9") should have been 1'); - assert(tr.stdOutContained('compareVersions("1.20.10", "0.20.11") should have been 1') , 'Should have printed: compareVersions("1.20.10", "0.20.11") should have been 1'); - - done(); - } catch(error) { - done(error); - } - }); - -}); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/L0CompareVersions.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/L0CompareVersions.ts deleted file mode 100644 index ad11c078..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/L0CompareVersions.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../src/azure-terraform-command-handler'; -import tasks = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -// test cases for compareVersions -if (terraformCommandHandlerAzureRM.compareVersions("0.20.7", "0.20.8") === -1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.7", "0.20.8") should have been -1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.8") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.8") should have been 1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.2.9", "0.2.9") === 0) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.2.9", "0.2.9") should have been 0'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.09") === 0) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.09") should have been 0'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.21.9", "0.20.9") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.21.9", "0.20.9") should have been 1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("1.20.10", "0.20.11") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("1.20.10", "0.20.11") should have been 1'); -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/MultipleProviderWarning.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/MultipleProviderWarning.ts deleted file mode 100644 index 6c5a5590..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/MultipleProviderWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './MultipleProviderWarningL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm\nprovider aws\nprovider gcp" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts deleted file mode 100644 index 12e01c99..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'MultipleProviderWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/SingleProviderNoWarning.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/SingleProviderNoWarning.ts deleted file mode 100644 index ff8c8af5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/SingleProviderNoWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './SingleProviderNoWarningL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts deleted file mode 100644 index 5ddc2069..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'SingleProviderNoWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 01eb4474..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 37a76b20..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index 1f63748b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 18c3f1d4..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts deleted file mode 100644 index 0319b6c7..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index df0ae313..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index c041579c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 6666d40c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 3b637354..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index a8093d6d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index a83ce200..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b513f16c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts deleted file mode 100644 index 0f0d823a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index c74ce224..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index 2d77312d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index e9006c46..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 2a18603f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -detailed-exitcode": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 498114a1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index 501ebf13..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -detailed-exitcode": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b004e73e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts deleted file mode 100644 index 3ba74958..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider gcp" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts deleted file mode 100644 index 80d27b90..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index 9f03de0b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider gcp" - }, - "terraform plan -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index cfe99ad4..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index 4db0e496..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 7aa2af6c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts deleted file mode 100644 index 4b819a80..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index f68aec6e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index 699f585b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index bcc2bb57..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index 07b55455..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 53d49a0e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index ab786a7d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b5915831..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts deleted file mode 100644 index a77bc24b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index 2591fdfc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index 94f69ba5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index d00984fe..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index f47be4b5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 8e630331..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index 4158f2eb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 91ceb426..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts deleted file mode 100644 index 25eda041..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index d05edcf9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index bdf86b0c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 186d1e3d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index c3536a8d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index dc265f90..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/package-lock.json b/Tasks/TerraformTask/TerraformTaskV4/Tests/package-lock.json deleted file mode 100644 index f4927643..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/package-lock.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "nock": "13.2.4" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" - }, - "engines": { - "node": ">= 10.13" - } - }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "engines": { - "node": ">= 8" - } - } - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" - } - }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/Tests/package.json b/Tasks/TerraformTask/TerraformTaskV4/Tests/package.json deleted file mode 100644 index c98b53b9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/Tests/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "terraform task installer test", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git" - }, - "author": "Microsoft Corporation", - "license": "MIT", - "bugs": { - "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues" - }, - "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme", - "dependencies": { - "nock": "13.2.4" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/ThirdPartyNotices.txt b/Tasks/TerraformTask/TerraformTaskV4/ThirdPartyNotices.txt deleted file mode 100644 index 2b5f4c15..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/ThirdPartyNotices.txt +++ /dev/null @@ -1,345 +0,0 @@ - -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION -Do Not Translate or Localize - -Terraform incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. - -1. @types/mocha (https://github.com/DefinitelyTyped/DefinitelyTyped.git) -2. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -3. @types/q (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -4. azure-pipelines-task-lib (https://github.com/microsoft/azure-pipelines-task-lib) -5. minimatch (https://github.com/isaacs/minimatch) -6. Mockery (https://github.com/mfncooper/mockery) -7. Q (https://github.com/kriskowal/q) -8. semver (https://github.com/npm/node-semver/) -9. ShellJS (https://github.com/shelljs/shelljs) -10. uuid (https://www.npmjs.com/package/node-uuid) -11. balanced-match (https://github.com/juliangruber/balanced-match) -12. brace-expansion (https://github.com/juliangruber/brace-expansion) -13. concat-map (https://github.com/substack/node-concat-map) - -%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/mocha NOTICES, INFORMATION, AND LICENSE - -%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/node NOTICES, INFORMATION, AND LICENSE - -%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/q NOTICES, INFORMATION, AND LICENSE - -%% azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -========================================= -END OF azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE - -%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF minimatch NOTICES, INFORMATION, AND LICENSE - -%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyrights for code authored by Yahoo! Inc. is licensed under the following -terms: - -MIT License - - Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -========================================= -END OF Mockery NOTICES, INFORMATION, AND LICENSE - -%% Q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - - The file q.js is prefaced by the following additional third-party subcomponent information: - - /*! - * - * Copyright 2009-2012 Kris Kowal under the terms of the MIT - * license found at http://github.com/kriskowal/q/raw/master/LICENSE - * - * With parts by Tyler Close - * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found - * at http://www.opensource.org/licenses/mit-license.html - * Forked at ref_send.js version: 2009-05-11 - * - * With parts by Mark Miller - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -========================================= -END OF Q NOTICES, INFORMATION, AND LICENSE - -%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF semver NOTICES, INFORMATION, AND LICENSE - -%% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright (c) 2012, Artur Adib - All rights reserved. - - You may use this project under the terms of the New BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF ShellJS NOTICES, INFORMATION, AND LICENSE - -%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) 2010-2012 Robert Kieffer - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF uuid NOTICES, INFORMATION, AND LICENSE - -%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF balanced-match NOTICES, INFORMATION, AND LICENSE - -%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF brace-expansion NOTICES, INFORMATION, AND LICENSE - -%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) James Halliday/substack - - This software is released under the MIT license: - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF concat-map NOTICES, INFORMATION, AND LICENSE diff --git a/Tasks/TerraformTask/TerraformTaskV4/icon.png b/Tasks/TerraformTask/TerraformTaskV4/icon.png deleted file mode 100644 index 7f0bb0f4..00000000 Binary files a/Tasks/TerraformTask/TerraformTaskV4/icon.png and /dev/null differ diff --git a/Tasks/TerraformTask/TerraformTaskV4/icon.svg b/Tasks/TerraformTask/TerraformTaskV4/icon.svg deleted file mode 100644 index d270ea55..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Tasks/TerraformTask/TerraformTaskV4/make.json b/Tasks/TerraformTask/TerraformTaskV4/make.json deleted file mode 100644 index 2c63c085..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/make.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/package-lock.json b/Tasks/TerraformTask/TerraformTaskV4/package-lock.json deleted file mode 100644 index f57d6c80..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/package-lock.json +++ /dev/null @@ -1,5980 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "azure-devops-node-api": "^12.0.0", - "azure-pipelines-task-lib": "^4.1.0", - "azure-pipelines-tasks-artifacts-common": "^2.225.0", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "mocha": "10.2.0", - "ts-loader": "^5.2.2", - "ts-node": "^10.9.1", - "typescript": "^4.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/fs-extra": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", - "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", - "dev": true - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/azure-devops-node-api": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.4.0.tgz", - "integrity": "sha512-ZrJlnoAOjliBYvO1wV9oa5Saa3h5tfRbvCSpwjqryag7bIeeY5Zl/zGiZBVD+75EumhtY5mOXNBzHvLf6JmdNQ==", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.10.0.tgz", - "integrity": "sha512-/j5nwVEPYx/WV/5H66BuMK3ubrKYFgbFc0yPmEwfXvDwNbgXeIHtcXXZGHiCVq2q+JmHcFYav9sfOrCq2O2Bdg==", - "dependencies": { - "adm-zip": "^0.5.10", - "deasync": "^0.1.28", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/azure-pipelines-tasks-artifacts-common": { - "version": "2.230.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-artifacts-common/-/azure-pipelines-tasks-artifacts-common-2.230.0.tgz", - "integrity": "sha512-FWyRjR+eqNjjVvXwiIJVcfLN+DTmbS3icRgrL6zAGx7iIKJOJn+sjlKOuCIR36TaWU4KOVfDGJujDK6Z+WPY8g==", - "dependencies": { - "@types/fs-extra": "8.0.0", - "@types/mocha": "^5.2.6", - "@types/node": "^16.11.39", - "azure-devops-node-api": "12.0.0", - "azure-pipelines-task-lib": "^4.2.0", - "fs-extra": "8.1.0", - "semver": "6.3.0" - } - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/@types/node": { - "version": "16.18.85", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.85.tgz", - "integrity": "sha512-un7Bj6CPCRLxG2qp+9enNVFuRWCDKKOS6Q/FSpJ4xyrpLNJnRdAQERM2sJ6esaGvl02nK6kiGcMTb0pqknm62g==" - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/azure-devops-node-api": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.0.0.tgz", - "integrity": "sha512-S6Il++7dQeMlZDokBDWw7YVoPeb90tWF10pYxnoauRMnkuL91jq9M7SOYRVhtO3FUC5URPkB/qzGa7jTLft0Xw==", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/deasync": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.29.tgz", - "integrity": "sha512-EBtfUhVX23CE9GR6m+F8WPeImEE4hR/FW9RkK0PMl9V1t283s0elqsTD8EZjaKX28SY1BW2rYfCgNsAYdpamUw==", - "hasInstallScript": true, - "dependencies": { - "bindings": "^1.5.0", - "node-addon-api": "^1.7.1" - }, - "engines": { - "node": ">=0.11.0" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - }, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "dependencies": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/ts-loader": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", - "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", - "dev": true, - "dependencies": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" - }, - "engines": { - "node": ">=6.11.5" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/ts-loader/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-loader/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-loader/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/ts-loader/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/ts-loader/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ts-loader/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-loader/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-loader/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/ts-loader/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typed-rest-client": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "@types/fs-extra": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", - "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", - "requires": { - "@types/node": "*" - } - }, - "@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", - "dev": true - }, - "@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true - }, - "acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true - }, - "adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "azure-devops-node-api": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.4.0.tgz", - "integrity": "sha512-ZrJlnoAOjliBYvO1wV9oa5Saa3h5tfRbvCSpwjqryag7bIeeY5Zl/zGiZBVD+75EumhtY5mOXNBzHvLf6JmdNQ==", - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "azure-pipelines-task-lib": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.10.0.tgz", - "integrity": "sha512-/j5nwVEPYx/WV/5H66BuMK3ubrKYFgbFc0yPmEwfXvDwNbgXeIHtcXXZGHiCVq2q+JmHcFYav9sfOrCq2O2Bdg==", - "requires": { - "adm-zip": "^0.5.10", - "deasync": "^0.1.28", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tasks-artifacts-common": { - "version": "2.230.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-artifacts-common/-/azure-pipelines-tasks-artifacts-common-2.230.0.tgz", - "integrity": "sha512-FWyRjR+eqNjjVvXwiIJVcfLN+DTmbS3icRgrL6zAGx7iIKJOJn+sjlKOuCIR36TaWU4KOVfDGJujDK6Z+WPY8g==", - "requires": { - "@types/fs-extra": "8.0.0", - "@types/mocha": "^5.2.6", - "@types/node": "^16.11.39", - "azure-devops-node-api": "12.0.0", - "azure-pipelines-task-lib": "^4.2.0", - "fs-extra": "8.1.0", - "semver": "6.3.0" - }, - "dependencies": { - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "@types/node": { - "version": "16.18.85", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.85.tgz", - "integrity": "sha512-un7Bj6CPCRLxG2qp+9enNVFuRWCDKKOS6Q/FSpJ4xyrpLNJnRdAQERM2sJ6esaGvl02nK6kiGcMTb0pqknm62g==" - }, - "azure-devops-node-api": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.0.0.tgz", - "integrity": "sha512-S6Il++7dQeMlZDokBDWw7YVoPeb90tWF10pYxnoauRMnkuL91jq9M7SOYRVhtO3FUC5URPkB/qzGa7jTLft0Xw==", - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - } - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "deasync": { - "version": "0.1.29", - "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.29.tgz", - "integrity": "sha512-EBtfUhVX23CE9GR6m+F8WPeImEE4hR/FW9RkK0PMl9V1t283s0elqsTD8EZjaKX28SY1BW2rYfCgNsAYdpamUw==", - "requires": { - "bindings": "^1.5.0", - "node-addon-api": "^1.7.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "requires": { - "get-intrinsic": "^1.2.4" - } - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "requires": { - "reusify": "^1.0.4" - } - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "requires": { - "hasown": "^2.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "requires": { - "hasown": "^2.0.0" - } - }, - "is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - } - }, - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - } - }, - "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "node-addon-api": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", - "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==" - }, - "nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "requires": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "requires": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - } - } - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "ts-loader": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", - "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "typed-rest-client": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - } - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - } - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/package.json b/Tasks/TerraformTask/TerraformTaskV4/package.json deleted file mode 100644 index 010e4971..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "npm run compile && mocha --timeout 10000 --require ts-node/register Tests/L0.ts", - "compile": "tsc -b tsconfig.json" - }, - "author": "", - "license": "ISC", - "dependencies": { - "azure-devops-node-api": "^12.0.0", - "azure-pipelines-task-lib": "^4.1.0", - "azure-pipelines-tasks-artifacts-common": "^2.225.0", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "mocha": "10.2.0", - "ts-loader": "^5.2.2", - "typescript": "^4.0.0", - "ts-node": "^10.9.1" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/aws-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV4/src/aws-terraform-command-handler.ts deleted file mode 100644 index 4c6b3e97..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/aws-terraform-command-handler.ts +++ /dev/null @@ -1,35 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; - -export class TerraformCommandHandlerAWS extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "aws"; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('bucket', tasks.getInput("backendAWSBucketName", true)); - this.backendConfig.set('key', tasks.getInput("backendAWSKey", true)); - this.backendConfig.set('region', tasks.getEndpointAuthorizationParameter(backendServiceName, "region", true)); - this.backendConfig.set('access_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "username", true)); - this.backendConfig.set('secret_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "password", true)); - } - - public async handleBackend(terraformToolRunner: ToolRunner) : Promise { - let backendServiceName = tasks.getInput("backendServiceAWS", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public async handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise { - if (command.serviceProvidername) { - process.env['AWS_ACCESS_KEY_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "username", false); - process.env['AWS_SECRET_ACCESS_KEY'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "password", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/azure-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV4/src/azure-terraform-command-handler.ts deleted file mode 100644 index 01735798..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/azure-terraform-command-handler.ts +++ /dev/null @@ -1,172 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; -import {generateIdToken} from './id-token-generator'; - -export class TerraformCommandHandlerAzureRM extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "azurerm"; - } - - backendIdToken: string; - environmentIdToken: string; - - private async setupBackend(backendServiceName: string) : Promise { - const authorizationScheme = this.mapAuthorizationScheme(tasks.getEndpointAuthorizationScheme(tasks.getInput("backendServiceArm", true), true)); - - tasks.debug('Setting up backend for authorization scheme: ' + authorizationScheme + '.'); - - this.backendConfig.set('storage_account_name', tasks.getInput("backendAzureRmStorageAccountName", true)); - this.backendConfig.set('container_name', tasks.getInput("backendAzureRmContainerName", true)); - this.backendConfig.set('key', tasks.getInput("backendAzureRmKey", true)); - this.backendConfig.set('resource_group_name', tasks.getInput("backendAzureRmResourceGroupName", true)); - const subscriptionId = tasks.getEndpointDataParameter(backendServiceName, "subscriptionid", true); - if(subscriptionId) { - this.backendConfig.set('subscription_id', tasks.getEndpointDataParameter(backendServiceName, "subscriptionid", true)); - } - this.backendConfig.set('tenant_id', tasks.getEndpointAuthorizationParameter(backendServiceName, "tenantid", true)); - - const useEnvironmentVariables = tasks.getInput("backendAzureRmUseEnvironmentVariablesForAuthentication", false) == "true"; - const useEntraIdAuthenticator = tasks.getInput("backendAzureRmUseEntraIdForAuthentication", false) == "true"; - - if(useEntraIdAuthenticator) { - this.backendConfig.set('use_azuread_auth', 'true'); - } - - switch(authorizationScheme) { - case AuthorizationScheme.ManagedServiceIdentity: - this.backendConfig.set('use_msi', 'true'); - break; - - case AuthorizationScheme.WorkloadIdentityFederation: - var workloadIdentityFederationCredentials = await this.getWorkloadIdentityFederationCredentials(backendServiceName); - - if(useEnvironmentVariables) { - tasks.debug('azurerm backend auth warning. Due to limitations in the Terraform azurerm backend, we are setting the ARM_CLIENT_ID and ARM_OIDC_TOKEN as environment variables. This is to avoid them being cached in the plan file. However this means that during the plan and apply stages this task will use the service connection supplied for the environmentServiceNameAzureRM input as opposed to the backendServiceArm input to connect to the storage account.') - process.env['ARM_CLIENT_ID'] = workloadIdentityFederationCredentials.servicePrincipalId; - process.env['ARM_OIDC_TOKEN'] = workloadIdentityFederationCredentials.idToken; - } else { - this.backendConfig.set('client_id', workloadIdentityFederationCredentials.servicePrincipalId); - this.backendConfig.set('oidc_token', workloadIdentityFederationCredentials.idToken); - } - - this.backendConfig.set('use_oidc', 'true'); - break; - - case AuthorizationScheme.ServicePrincipal: - var servicePrincipalCredentials = this.getServicePrincipalCredentials(backendServiceName); - - if(useEnvironmentVariables) { - tasks.debug('azurerm backend auth warning. Due to limitations in the Terraform azurerm backend, we are setting the ARM_CLIENT_ID and ARM_CLIENT_SECRET as environment variables. This is to avoid them being cached in the plan file. However this means that during the plan and apply stages this task will use the service connection supplied for the environmentServiceNameAzureRM input as opposed to the backendServiceArm input to connect to the storage account.') - process.env['ARM_CLIENT_ID'] = servicePrincipalCredentials.servicePrincipalId; - process.env['ARM_CLIENT_SECRET'] = servicePrincipalCredentials.servicePrincipalKey; - } else { - this.backendConfig.set('client_id', servicePrincipalCredentials.servicePrincipalId); - this.backendConfig.set('client_secret', servicePrincipalCredentials.servicePrincipalKey); - } - break; - } - - tasks.debug('Finished up backend for authorization scheme: ' + authorizationScheme + '.'); - } - - public async handleBackend(terraformToolRunner: ToolRunner): Promise { - let backendServiceName = tasks.getInput("backendServiceArm", true); - await this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public async handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise { - if (command.serviceProvidername) { - const authorizationScheme = this.mapAuthorizationScheme(tasks.getEndpointAuthorizationScheme(tasks.getInput("environmentServiceNameAzureRM", true), true)); - - tasks.debug('Setting up provider for authorization scheme: ' + authorizationScheme + '.'); - - const subscriptionId = tasks.getEndpointDataParameter(command.serviceProvidername, "subscriptionid", true); - if(subscriptionId) { - process.env['ARM_SUBSCRIPTION_ID'] = tasks.getEndpointDataParameter(command.serviceProvidername, "subscriptionid", false); - } - process.env['ARM_TENANT_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "tenantid", false); - - switch(authorizationScheme) { - case AuthorizationScheme.ManagedServiceIdentity: - process.env['ARM_USE_MSI'] = 'true'; - break; - - case AuthorizationScheme.WorkloadIdentityFederation: - var workloadIdentityFederationCredentials = await this.getWorkloadIdentityFederationCredentials(command.serviceProvidername); - process.env['ARM_CLIENT_ID'] = workloadIdentityFederationCredentials.servicePrincipalId; - process.env['ARM_OIDC_TOKEN'] = workloadIdentityFederationCredentials.idToken; - process.env['ARM_USE_OIDC'] = 'true'; - break; - - case AuthorizationScheme.ServicePrincipal: - var servicePrincipalCredentials = this.getServicePrincipalCredentials(command.serviceProvidername); - process.env['ARM_CLIENT_ID'] = servicePrincipalCredentials.servicePrincipalId; - process.env['ARM_CLIENT_SECRET'] = servicePrincipalCredentials.servicePrincipalKey; - break; - } - - tasks.debug('Finished up provider for authorization scheme: ' + authorizationScheme + '.'); - } - } - - private getServicePrincipalCredentials(connectionName: string) : ServicePrincipalCredentials { - let servicePrincipalCredentials : ServicePrincipalCredentials = { - servicePrincipalId: tasks.getEndpointAuthorizationParameter(connectionName, "serviceprincipalid", true), - servicePrincipalKey: tasks.getEndpointAuthorizationParameter(connectionName, "serviceprincipalkey", true) - } - return servicePrincipalCredentials; - } - - private async getWorkloadIdentityFederationCredentials(connectionName: string) : Promise { - let workloadIdentityFederationCredentials : WorkloadIdentityFederationCredentials = { - servicePrincipalId: tasks.getEndpointAuthorizationParameter(connectionName, "serviceprincipalid", true), - idToken: await generateIdToken(connectionName) - } - return workloadIdentityFederationCredentials; - } - - private mapAuthorizationScheme(authorizationScheme: string) : AuthorizationScheme { - if(authorizationScheme == undefined) { - tasks.debug('The authorization scheme is missing, using ServicePrincipal by default, but this could cause issues.'); - return AuthorizationScheme.ServicePrincipal; - } - - if(authorizationScheme.toLowerCase() == AuthorizationScheme.ServicePrincipal) { - return AuthorizationScheme.ServicePrincipal; - } - - if(authorizationScheme.toLowerCase() == AuthorizationScheme.ManagedServiceIdentity) { - return AuthorizationScheme.ManagedServiceIdentity; - } - - if(authorizationScheme.toLowerCase() == AuthorizationScheme.WorkloadIdentityFederation) { - return AuthorizationScheme.WorkloadIdentityFederation; - } - - tasks.debug('No matching authorization scheme was found, using ServicePrincipal by default, but this could cause issues.'); - return AuthorizationScheme.ServicePrincipal; - } -} - -interface ServicePrincipalCredentials { - servicePrincipalId: string; - servicePrincipalKey: string; -} - -interface WorkloadIdentityFederationCredentials { - servicePrincipalId: string; - idToken: string; -} - -enum AuthorizationScheme { - ServicePrincipal = "serviceprincipal", - ManagedServiceIdentity = "managedserviceidentity", - WorkloadIdentityFederation = "workloadidentityfederation" -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/base-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV4/src/base-terraform-command-handler.ts deleted file mode 100644 index 83371442..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/base-terraform-command-handler.ts +++ /dev/null @@ -1,277 +0,0 @@ -import {TerraformToolHandler, ITerraformToolHandler} from './terraform'; -import {ToolRunner, IExecOptions, IExecSyncOptions, IExecSyncResult} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformBaseCommandInitializer, TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import tasks = require('azure-pipelines-task-lib/task'); -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; -const fs = require('fs'); -const del = require('del'); - -export abstract class BaseTerraformCommandHandler { - providerName: string; - terraformToolHandler: ITerraformToolHandler; - backendConfig: Map; - - abstract handleBackend(terraformToolRunner: ToolRunner) : Promise; - abstract handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise; - - constructor() { - this.providerName = ""; - this.terraformToolHandler = new TerraformToolHandler(tasks); - this.backendConfig = new Map(); - } - - public compareVersions(version1: string, version2: string) { - let versionNumbers1: string[] = version1.split('.'); - let versionNumbers2: string[] = version2.split('.'); - - const smallerLength = Math.min(versionNumbers1.length, versionNumbers2.length); - - let versionNumbersInt1: number[] = new Array(smallerLength); - let versionNumbersInt2: number[] = new Array(smallerLength); - - for (let i = 0; i < smallerLength; i++) { - versionNumbersInt1[i] = parseInt(versionNumbers1[i], 10); - versionNumbersInt2[i] = parseInt(versionNumbers2[i], 10); - if (versionNumbersInt1[i] > versionNumbersInt2[i]) return 1; - if (versionNumbersInt1[i] < versionNumbersInt2[i]) return -1; - } - - return versionNumbersInt1.length == versionNumbersInt2.length ? 0: (versionNumbersInt1.length < versionNumbersInt2.length ? -1 : 1); - } - - public warnIfMultipleProviders(): void { - let terraformPath; - try { - terraformPath = tasks.which("terraform", true); - } catch(err) { - throw new Error(tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = tasks.tool(terraformPath); - terraformToolRunner.arg("providers"); - let commandOutput = terraformToolRunner.execSync({ - cwd: tasks.getInput("workingDirectory") - }); - - let countProviders = ["aws", "azurerm", "google", "oracle"].filter(provider => commandOutput.stdout.includes(provider)).length; - - tasks.debug(countProviders.toString()); - if (countProviders > 1) { - tasks.warning("Multiple provider blocks specified in the .tf files in the current working directory."); - } - } - - public getServiceProviderNameFromProviderInput(): string { - let provider: string = tasks.getInput("provider", true); - - switch (provider) { - case "azurerm": return "AzureRM"; - case "aws" : return "AWS"; - case "gcp" : return "GCP"; - case "oci" : return "OCI"; - } - } - - public async init(): Promise { - let initCommand = new TerraformBaseCommandInitializer( - "init", - tasks.getInput("workingDirectory"), - tasks.getInput("commandOptions") - ); - - let terraformTool; - - terraformTool = this.terraformToolHandler.createToolRunner(initCommand); - await this.handleBackend(terraformTool); - - return terraformTool.exec( { - cwd: initCommand.workingDirectory - }); - } - public async show(): Promise { - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let cmd; - const outputTo = tasks.getInput("outputTo"); - const outputFormat = tasks.getInput("outputFormat"); - if (outputFormat == "json"){ - cmd = tasks.getInput("commandOptions") != null ? `-json ${tasks.getInput("commandOptions")}`:`-json`; - }else{ - cmd = tasks.getInput("commandOptions") != null ? tasks.getInput("commandOptions"):``; - } - - let showCommand = new TerraformAuthorizationCommandInitializer( - "show", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - cmd - ); - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(showCommand); - await this.handleProvider(showCommand); - - if(outputTo == "console"){ - return terraformTool.exec( { - cwd: showCommand.workingDirectory}); - }else if(outputTo == "file"){ - const showFilePath = path.resolve(tasks.getInput("filename")); - let commandOutput = await terraformTool.execSync( { - cwd: showCommand.workingDirectory, - }); - - tasks.writeFile(showFilePath, commandOutput.stdout); - tasks.setVariable('showFilePath', showFilePath, false, true); - - return commandOutput; - } - } - public async output(): Promise { - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let commandOptions = tasks.getInput("commandOptions") != null ? `-json ${tasks.getInput("commandOptions")}`:`-json` - - let outputCommand = new TerraformAuthorizationCommandInitializer( - "output", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - commandOptions - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(outputCommand); - await this.handleProvider(outputCommand); - - const jsonOutputVariablesFilePath = path.resolve(`output-${uuidV4()}.json`); - let commandOutput = await terraformTool.execSync({ - cwd: outputCommand.workingDirectory, - }); - - tasks.writeFile(jsonOutputVariablesFilePath, commandOutput.stdout); - tasks.setVariable('jsonOutputVariablesPath', jsonOutputVariablesFilePath, false, true); - - return commandOutput; - } - - public async plan(): Promise { - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let commandOptions = tasks.getInput("commandOptions") != null ? `${tasks.getInput("commandOptions")} -detailed-exitcode`:`-detailed-exitcode` - let planCommand = new TerraformAuthorizationCommandInitializer( - "plan", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - commandOptions - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(planCommand); - await this.handleProvider(planCommand); - this.warnIfMultipleProviders(); - - let result = await terraformTool.exec( { - cwd: planCommand.workingDirectory, - ignoreReturnCode: true - }); - - if (result !== 0 && result !== 2) { - throw new Error(tasks.loc("TerraformPlanFailed", result)); - } - tasks.setVariable('changesPresent', (result === 2).toString(), false, true); - return result; - } - - public async custom(): Promise { - const outputTo = tasks.getInput("outputTo"); - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let customCommand = new TerraformAuthorizationCommandInitializer( - tasks.getInput("customCommand"), - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - tasks.getInput("commandOptions") - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(customCommand); - await this.handleProvider(customCommand); - - if(outputTo == "console"){ - return terraformTool.exec( { - cwd: customCommand.workingDirectory}); - }else if(outputTo == "file"){ - const customFilePath = path.resolve(tasks.getInput("filename")); - let commandOutput = await terraformTool.execSync( { - cwd: customCommand.workingDirectory}); - - tasks.writeFile(customFilePath, commandOutput.stdout); - tasks.setVariable('customFilePath', customFilePath, false, true); - return commandOutput; - } - } - - public async apply(): Promise { - let terraformTool; - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let autoApprove: string = '-auto-approve'; - let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; - - if (additionalArgs.includes(autoApprove) === false) { - additionalArgs = `${autoApprove} ${additionalArgs}`; - } - - let applyCommand = new TerraformAuthorizationCommandInitializer( - "apply", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - additionalArgs - ); - - terraformTool = this.terraformToolHandler.createToolRunner(applyCommand); - await this.handleProvider(applyCommand); - this.warnIfMultipleProviders(); - - return terraformTool.exec( { - cwd: applyCommand.workingDirectory - }); - } - - public async destroy(): Promise { - - let serviceName = `environmentServiceName${this.getServiceProviderNameFromProviderInput()}`; - let autoApprove: string = '-auto-approve'; - let additionalArgs: string = tasks.getInput("commandOptions") || autoApprove; - - if (additionalArgs.includes(autoApprove) === false) { - additionalArgs = `${autoApprove} ${additionalArgs}`; - } - - let destroyCommand = new TerraformAuthorizationCommandInitializer( - "destroy", - tasks.getInput("workingDirectory"), - tasks.getInput(serviceName, true), - additionalArgs - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(destroyCommand); - await this.handleProvider(destroyCommand); - this.warnIfMultipleProviders(); - - return terraformTool.exec( { - cwd: destroyCommand.workingDirectory - }); - }; - - public async validate(): Promise { - let validateCommand = new TerraformBaseCommandInitializer( - "validate", - tasks.getInput("workingDirectory"), - tasks.getInput("commandOptions") - ); - - let terraformTool; - terraformTool = this.terraformToolHandler.createToolRunner(validateCommand); - await Promise.resolve("This is here because the unit tests fail without it."); - - return terraformTool.exec({ - cwd: validateCommand.workingDirectory - }); - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/gcp-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV4/src/gcp-terraform-command-handler.ts deleted file mode 100644 index eb110fd4..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/gcp-terraform-command-handler.ts +++ /dev/null @@ -1,57 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; - -export class TerraformCommandHandlerGCP extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "gcp"; - } - - private getJsonKeyFilePath(serviceName: string) { - // Get credentials for json file - const jsonKeyFilePath = path.resolve(`credentials-${uuidV4()}.json`); - - let clientEmail = tasks.getEndpointAuthorizationParameter(serviceName, "Issuer", false); - let tokenUri = tasks.getEndpointAuthorizationParameter(serviceName, "Audience", false); - let privateKey = tasks.getEndpointAuthorizationParameter(serviceName, "PrivateKey", false); - - // Create json string and write it to the file - let jsonCredsString = `{"type": "service_account", "private_key": "${privateKey}", "client_email": "${clientEmail}", "token_uri": "${tokenUri}"}` - tasks.writeFile(jsonKeyFilePath, jsonCredsString); - - return jsonKeyFilePath; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('bucket', tasks.getInput("backendGCPBucketName", true)); - this.backendConfig.set('prefix', tasks.getInput("backendGCPPrefix", false)); - - let jsonKeyFilePath = this.getJsonKeyFilePath(backendServiceName); - - this.backendConfig.set('credentials', jsonKeyFilePath); - } - - public async handleBackend(terraformToolRunner: ToolRunner) : Promise { - tasks.debug('Setting up backend GCP.'); - let backendServiceName = tasks.getInput("backendServiceGCP", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - tasks.debug('Finished setting up backend GCP.'); - } - - public async handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise { - if (command.serviceProvidername) { - let jsonKeyFilePath = this.getJsonKeyFilePath(command.serviceProvidername); - - process.env['GOOGLE_CREDENTIALS'] = `${jsonKeyFilePath}`; - process.env['GOOGLE_PROJECT'] = tasks.getEndpointDataParameter(command.serviceProvidername, "project", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/id-token-generator.ts b/Tasks/TerraformTask/TerraformTaskV4/src/id-token-generator.ts deleted file mode 100644 index b0946581..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/id-token-generator.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { getFederatedToken } from "azure-pipelines-tasks-artifacts-common/webapi"; - -export async function generateIdToken(connectedService : string): Promise { - let tokenGenerator = new TokenGenerator(); - return await tokenGenerator.generate(connectedService); -} - -export interface ITokenGenerator { - generate(connectedService : string): Promise; -} - -export class TokenGenerator implements ITokenGenerator { - public async generate(connectedService : string): Promise { - const token = await getFederatedToken(connectedService); - console.log('##vso[task.setsecret]' + token); - return token; - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/index.ts b/Tasks/TerraformTask/TerraformTaskV4/src/index.ts deleted file mode 100644 index 7407a745..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ParentCommandHandler} from './parent-handler'; -import path = require('path'); - -async function run() { - tasks.setResourcePath(path.join(__dirname, '..', 'task.json')); - - let parentHandler = new ParentCommandHandler(); - try { - await parentHandler.execute(tasks.getInput("provider"), tasks.getInput("command")); - tasks.setResult(tasks.TaskResult.Succeeded, ""); - } catch (error) { - tasks.setResult(tasks.TaskResult.Failed, error); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/parent-handler.ts b/Tasks/TerraformTask/TerraformTaskV4/src/parent-handler.ts deleted file mode 100644 index 0fb6bbd6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/parent-handler.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { BaseTerraformCommandHandler } from './base-terraform-command-handler'; -import { TerraformCommandHandlerAzureRM } from './azure-terraform-command-handler'; -import { TerraformCommandHandlerAWS } from './aws-terraform-command-handler'; -import { TerraformCommandHandlerGCP } from './gcp-terraform-command-handler'; -import { TerraformCommandHandlerOCI } from './oci-terraform-command-handler'; - -export interface IParentCommandHandler { - execute(providerName: string, command: string): Promise; -} - -export class ParentCommandHandler implements IParentCommandHandler { - public async execute(providerName: string, command: string): Promise { - // Create corresponding command handler according to provider name - let provider: BaseTerraformCommandHandler; - - switch(providerName) { - case "azurerm": - provider = new TerraformCommandHandlerAzureRM(); - break; - - case "aws": - provider = new TerraformCommandHandlerAWS(); - break; - - case "gcp": - provider = new TerraformCommandHandlerGCP(); - break; - - case "oci": - provider = new TerraformCommandHandlerOCI(); - break; - } - - // Run the corrresponding command according to command name - return await provider[command](); - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/terraform-commands.ts b/Tasks/TerraformTask/TerraformTaskV4/src/terraform-commands.ts deleted file mode 100644 index da75ba70..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/terraform-commands.ts +++ /dev/null @@ -1,29 +0,0 @@ -export class TerraformBaseCommandInitializer { - public readonly name: string; - public readonly workingDirectory: string; - public readonly additionalArgs: string | undefined; - - constructor( - name: string, - workingDirectory: string, - additionalArgs?: string | undefined - ) { - this.name = name; - this.workingDirectory = workingDirectory; - this.additionalArgs = additionalArgs; - } -} - -export class TerraformAuthorizationCommandInitializer extends TerraformBaseCommandInitializer { - readonly serviceProvidername: string; - - constructor( - name: string, - workingDirectory: string, - serviceProvidername: string, - additionalArgs?: string | undefined - ) { - super(name, workingDirectory, additionalArgs); - this.serviceProvidername = serviceProvidername; - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV4/src/terraform.ts b/Tasks/TerraformTask/TerraformTaskV4/src/terraform.ts deleted file mode 100644 index 59ea03a6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/src/terraform.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner' -import { TerraformBaseCommandInitializer } from './terraform-commands' - -export interface ITerraformToolHandler { - createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner; -} - -export class TerraformToolHandler implements ITerraformToolHandler { - private readonly tasks: any; - - constructor(tasks: any) { - this.tasks = tasks; - } - - public createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner { - let terraformPath; - try { - terraformPath = this.tasks.which("terraform", true); - } catch(err) { - throw new Error(this.tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = this.tasks.tool(terraformPath); - if (command) { - terraformToolRunner.arg(command.name); - if (command.additionalArgs) { - terraformToolRunner.line(command.additionalArgs); - } - } - - return terraformToolRunner; - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/task.json b/Tasks/TerraformTask/TerraformTaskV4/task.json deleted file mode 100644 index 78b43654..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/task.json +++ /dev/null @@ -1,394 +0,0 @@ -{ - "id": "FE504ACC-6115-40CB-89FF-191386B5E7BF", - "name": "TerraformTaskV4", - "friendlyName": "Terraform", - "description": "Execute terraform commands to manage resources on AzureRM, Amazon Web Services(AWS), Google Cloud Platform(GCP) and Oracle Cloud Infrastructure(OCI). v4.241.11", - "author": "Microsoft Corporation", - "helpMarkDown": "[Learn more about this task](https://aka.ms/devlabs/ado/tf/task/v4)", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "showEnvironmentVariables": true, - "demands": [], - "version": { - "Major": "4", - "Minor": "241", - "Patch": "11" - }, - "instanceNameFormat": "Terraform : $(provider)", - "execution": { - "Node10": { - "target": "src/index.js" - }, - "Node16": { - "target": "src/index.js" - }, - "Node20_1": { - "target": "src/index.js" - } - }, - "groups": [ - { - "name": "backendAzureRm", - "displayName": "AzureRM backend configuration", - "isExpanded": true, - "visibleRule": "provider = azurerm && command = init" - }, - { - "name": "providerAzureRm", - "displayName": "Azure provider configuration (AzureRM, AzureAD and AzAPI)", - "isExpanded": true, - "visibleRule": "provider = azurerm && command != init" - }, - { - "name": "backendAWS", - "displayName": "Amazon Web Services(AWS) backend configuration", - "isExpanded": true, - "visibleRule": "provider = aws && command = init" - }, - { - "name": "backendGCP", - "displayName": "Google Cloud Platform(GCP) backend configuration", - "isExpanded": true, - "visibleRule": "provider = gcp && command = init" - }, - { - "name": "backendOCI", - "displayName": "Oracle Cloud Infrastructure(OCI) backend configuration", - "isExpanded": true, - "visibleRule": "provider = oci && command = init" - } - ], - "inputs": [ - { - "name": "provider", - "type": "picklist", - "label": "Provider", - "defaultValue": "azurerm", - "required": true, - "helpMarkDown": "The name of the provider used in the terraform configuration files.
Only one provider must be specified in the terraform configuration files in the below specified configuration directory.", - "options": { - "azurerm": "azurerm", - "aws": "aws", - "gcp": "gcp", - "oci": "oci" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "command", - "type": "pickList", - "label": "Command", - "defaultValue": "init", - "required": true, - "helpMarkDown": "The terraform command to execute.", - "options": { - "init": "init", - "validate": "validate", - "plan": "plan", - "show": "show", - "apply": "apply", - "output": "output", - "destroy": "destroy", - "custom": "custom" - }, - "properties": { - "EditableOptions": "False" - } - }, - { - "name": "workingDirectory", - "type": "filePath", - "label": "Configuration directory", - "defaultValue": "$(System.DefaultWorkingDirectory)", - "helpMarkDown": "Directory containing the Terraform configuration files. The default value is $(System.DefaultWorkingDirectory)", - "required": false - }, - { - "name": "commandOptions", - "type": "string", - "label": "Additional command arguments", - "helpMarkDown": "Any additional arguments for the selected command such as '-option=value' or '-flag'. Multiple options can also be provided delimited by spaces.

Examples:
-out=tfplan (for terraform plan)
tfplan -auto-approve (for terraform apply)", - "required": false - }, - { - "name": "outputTo", - "type": "pickList", - "label": "Output to", - "defaultValue": "console", - "visibleRule": "command = show || command = custom", - "helpMarkDown": "choose output to file or console. ", - "options": { - "file": "file", - "console": "console" - }, - "required": true - }, - { - "name": "customCommand", - "type": "string", - "label": "Custom command", - "visibleRule": "command = custom", - "helpMarkDown": "The custom terraform command to execute.", - "required": true - }, - { - "name": "outputFormat", - "type": "pickList", - "label": "Output format", - "defaultValue": "default", - "visibleRule": "command = show", - "helpMarkDown": "choose format of ouput for show cmd. ", - "options": { - "json": "json", - "default": "default" - }, - "required": true - }, - { - "name": "fileName", - "type": "string", - "label": "Output Filename", - "visibleRule": "outputTo = file", - "required": true, - "helpMarkDown": "filename of output" - }, - { - "name": "environmentServiceNameAzureRM", - "type": "connectedService:AzureRM", - "label": "Azure Provider Service Connection", - "required": true, - "visibleRule": "provider = azurerm && command != init && command != validate", - "helpMarkDown": "Select an Azure Resource Manager Service Connection for the Azure providers", - "groupName": "providerAzureRm" - }, - { - "name": "environmentServiceNameAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "Amazon Web Services connection", - "required": true, - "visibleRule": "provider = aws && command != init && command != validate", - "helpMarkDown": "Select an Amazon Web Services connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button." - }, - { - "name": "environmentServiceNameGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "Google Cloud Platform connection", - "required": true, - "visibleRule": "provider = gcp && command != init && command != validate", - "helpMarkDown": "Select a Google Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button." - }, - { - "name": "environmentServiceNameOCI", - "type": "connectedService:OracleCloudInfrastructureServiceEndpoint", - - "label": "Oracle Cloud Platform connection", - "required": true, - "visibleRule": "provider = oci && command != init && command != validate", - "helpMarkDown": "Select a Oracle Cloud Platform connection for the deployment.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Oracle Cloud Platform service connection using the 'Add' or 'Manage' button." - }, - { - "name": "backendAzureRmUseEnvironmentVariablesForAuthentication", - "type": "boolean", - "properties": { - "PopulateDefaultValue": "True" - }, - "label": "Use Env Vars for Authentication", - "helpMarkDown": "Choose whether to use environment variables for azurerm backend authentication. If selected, the principal details will be created as environment variables for 'ARM_CLIENT_ID' and 'ARM_CLIENT_SECRET' or 'ARM_OIDC_TOKEN'.", - "groupName": "backendAzureRm" - }, - { - "name": "backendAzureRmUseEntraIdForAuthentication", - "type": "boolean", - "properties": { - "PopulateDefaultValue": "True" - }, - "label": "Use Entra ID for Authentication", - "helpMarkDown": "Choose whether to use Entra Id authentication to the storage account. If selected, 'use_azuread_auth = true' will be passed to the backend config.", - "groupName": "backendAzureRm" - }, - { - "name": "backendServiceArm", - "type": "connectedService:AzureRM", - "label": "Azure Backend Service Connection", - "required": true, - "helpMarkDown": "Select an Azure Resource Manager Service Connection for the terraform azurerm backend configuration", - "groupName": "backendAzureRm" - }, - { - "name": "backendAzureRmResourceGroupName", - "type": "pickList", - "label": "Resource group", - "required": true, - "helpMarkDown": "The name of the resource group which contains the storage account selected below.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmStorageAccountName", - "type": "pickList", - "label": "Storage account", - "required": true, - "helpMarkDown": "The name of the storage account which contains the Azure Blob container selected below.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmContainerName", - "type": "pickList", - "label": "Container", - "required": true, - "helpMarkDown": "The name of the Azure Blob container in which to store the Terraform remote state file.", - "groupName": "backendAzureRm", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAzureRmKey", - "type": "string", - "label": "Key", - "required": true, - "helpMarkDown": "The path to the Terraform remote state file inside the container.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'", - "groupName": "backendAzureRm" - }, - { - "name": "backendServiceAWS", - "type": "connectedService:AWSServiceEndpoint", - "label": "Amazon Web Services connection", - "required": true, - "helpMarkDown": "Amazon Web Services connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup an Amazon Web Services service connection using the 'Add' or 'Manage' button.", - "groupName": "backendAWS" - }, - { - "name": "backendAWSBucketName", - "type": "pickList", - "label": "Bucket", - "required": true, - "helpMarkDown": "The name of the Amazon Simple Storage Service(S3) bucket for storing the Terraform remote state file.

NOTE: The region of this bucket (e.g. us-east-1) must be specified in the AWS service connection that you must set up. To set up an AWS service connection, click on the 'Help(i)' button of the above input named 'Amazon Web Services connection'", - "groupName": "backendAWS", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendAWSKey", - "type": "string", - "label": "Key", - "required": true, - "helpMarkDown": "The path to the state file inside the Amazon S3 bucket.
For example, if you want to store the state file, named terraform.tfstate, inside a folder, named tf, then give the input 'tf/terraform.tfstate'.", - "groupName": "backendAWS" - }, - { - "name": "backendServiceGCP", - "type": "connectedService:GoogleCloudServiceEndpoint", - "label": "Google Cloud Platform connection", - "required": true, - "helpMarkDown": "Google Cloud Platform connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Google Cloud Platform service connection using the 'Add' or 'Manage' button.", - "groupName": "backendGCP" - }, - { - "name": "backendGCPBucketName", - "type": "pickList", - "label": "Bucket", - "required": true, - "helpMarkDown": "The name of the GCP storage bucket for storing the Terraform remote state file.", - "groupName": "backendGCP", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "backendGCPPrefix", - "type": "string", - "label": "Prefix of state file", - "required": false, - "helpMarkDown": "The relative path to the state file inside the GCP bucket. For example, if you give the input as 'terraform', then the state file, named default.tfstate, will be stored inside an object called terraform.", - "groupName": "backendGCP" - }, - { - "name": "backendServiceOCI", - "type": "connectedService:OracleCloudInfrastructureServiceEndpoint", - "label": "Oracle Cloud Infrastructure connection", - "required": true, - "helpMarkDown": "Oracle Cloud Infrastructure connection for the terraform backend configuration.

Note: If your connection is not listed or if you want to use an existing connection, you can setup a Oracle Cloud Platform service connection using the 'Add' or 'Manage' button.", - "groupName": "backendOCI" - }, - { - "name": "backendOCIPar", - "type": "string", - "label": "PAR for Terraform remote state file", - "required": false, - "helpMarkDown": "The OCI object storage PAR configuration for the Terraform remote state file (optional)", - "groupName": "backendOCI" - }, - { - "name": "backendOCIConfigGenerate", - "type": "pickList", - "label": "Generate the Terraform remote state file config (Use Yes when not included in TF files)", - "required": true, - "defaultValue": "yes", - "helpMarkDown": "Generates the Terraform remote state file config, select Yes when not included in TF files, othwerwise No.", - "groupName": "backendOCI", - "options": { - "yes": "yes", - "no": "no" - } - } - ], - "dataSourceBindings": [ - { - "target": "backendAzureRmResourceGroupName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourcegroups?api-version=2019-05-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmStorageAccountName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAzureRmContainerName", - "endpointId": "$(backendServiceArm)", - "endpointUrl": "{{{endpoint.url}}}subscriptions/{{{endpoint.subscriptionId}}}/resourceGroups/$(backendAzureRmResourceGroupName)/providers/Microsoft.Storage/storageAccounts/$(backendAzureRmStorageAccountName)/blobServices/default/containers?api-version=2019-04-01", - "resultSelector": "jsonpath:$.value[*].name" - }, - { - "target": "backendAWSBucketName", - "endpointId": "$(backendServiceAWS)", - "dataSourceName": "AWS" - }, - { - "target": "backendGCPBucketName", - "endpointId": "$(backendServiceGCP)", - "dataSourceName": "GCP" - } - ], - "outputVariables": [ - { - "name": "jsonPlanFilePath", - "description": "The location of the terraform plan file in JSON format that was created. This file can be used by tasks which are written for tools such as [Open Policy Agent](https://www.openpolicyagent.org/docs/latest/terraform/)

Note: This variable will only be set if 'command' input is set to 'plan'." - }, - { - "name": "jsonOutputVariablesPath", - "description": "The location of the JSON file which contains the output variables set by the user in the terraform config files.

Note: This variable will only be set if 'command' input is set to 'output'." - }, - { - "name": "changesPresent", - "description": "A boolean indicating if the terraform plan found any changes to apply." - } - ], - "messages": { - "TerraformToolNotFound": "Failed to find terraform tool in paths" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV4/tsconfig.json b/Tasks/TerraformTask/TerraformTaskV4/tsconfig.json deleted file mode 100644 index cadceb7a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV4/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "commonjs", - "skipLibCheck": true - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 409cf54a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 6cb009f9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 65bc1228..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index cecaf672..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 3019f97f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 733094cc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/AWS/AWSApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 3227499b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplyFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.apply(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplyFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 38312d8f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts deleted file mode 100644 index fb1bf70b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentity.ts +++ /dev/null @@ -1,38 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ManagedServiceIdentity'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform apply -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts deleted file mode 100644 index 9a764150..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAuthenticationSchemeManagedServiceIdentityL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts deleted file mode 100644 index c4f9c7ab..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessAuthenticationSchemeWorkloadIdentityFederationL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 38012d68..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/Azure/AzureApplySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureApplySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 4bc112d3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 196e047a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.apply(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPApplySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 0417cfbc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ApplyTests/GCP/GCPApplySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPApplySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'apply'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform apply -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index e9c17e68..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 7346c224..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 6914c6d3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index c608083c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 2de65535..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index b4fbae63..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index b3b6c2b1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index db2b4532..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/AWS/AWSDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index a8b0a0bd..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 5d8a7a50..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index 225ce264..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 5d605c3f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 31025690..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index 5e8130ef..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index 50a305c5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 45698517..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/Azure/AzureDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts deleted file mode 100644 index bd7d3f8a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroyFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 3858407c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroyFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.destroy(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroyFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts deleted file mode 100644 index ff5551fa..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessAdditionalArgsWithAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-auto-approve -no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts deleted file mode 100644 index 76dfd68a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts deleted file mode 100644 index 6806eb89..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApprove.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve -no-color": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts deleted file mode 100644 index e26084b3..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessAdditionalArgsWithoutAutoApproveL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts deleted file mode 100644 index 3fb4c2b1..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPDestroySuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'destroy'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "Executed successfully" - }, - "terraform destroy -auto-approve": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts deleted file mode 100644 index ecb87946..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/DestroyTests/GCP/GCPDestroySuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.destroy(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPDestroySuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts deleted file mode 100644 index a94c3381..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 1, - "stdout": "There are some problems with the configuration, described below.\n\nThe Terraform configuration must be valid before initialization so that Terraform can determine which modules and providers need to be installed." - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index f890dbca..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts deleted file mode 100644 index add6a6eb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', '-no-color'); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -no-color -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 3793391c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts deleted file mode 100644 index 833be0ef..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 7beb8d2b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts deleted file mode 100644 index 0cb83317..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSInitSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'init'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -tr.setInput('backendServiceAWS', 'AWS'); -tr.setInput('backendAWSBucketName', 'DummyBucket'); -tr.setInput('backendAWSKey', 'DummyKey'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform init -backend-config=bucket=DummyBucket -backend-config=key=DummyKey -backend-config=region=DummyRegion -backend-config=access_key=DummyUsername -backend-config=secret_key=DummyPassword": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); - -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 8523a416..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/AWS/AWSInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index cc143336..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 17a2a463..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts deleted file mode 100644 index 6963a44a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAuthenticationSchemeManagedServiceIdentityAndDefaultSettingsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts deleted file mode 100644 index 1c8a4c23..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessAuthenticationSchemeWorkloadIdentityFederationAndDefaultSettingsL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 44a4b635..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts deleted file mode 100644 index f6102050..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessLowerCaseAuthenticationSchemeL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessLowerCaseAuthenticationSchemeL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessLowerCaseAuthenticationSchemeL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessLowerCaseAuthenticationSchemeL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts deleted file mode 100644 index dc1f2e9b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMalformedAuthenticationSchemeL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessMalformedAuthenticationSchemeL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessMalformedAuthenticationSchemeL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessMalformedAuthenticationSchemeL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts deleted file mode 100644 index 7d000d3c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/Azure/AzureInitSuccessMissingAuthenticationSchemeL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureInitSuccessMissingAuthenticationSchemeL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessMissingAuthenticationSchemeL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureInitSuccessMissingAuthenticationSchemeL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 16c25d97..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.init(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitFailInvalidWorkingDirectoryL0 should have succeeded but failed.'); - } -} - -run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts deleted file mode 100644 index 59da6103..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 79244a86..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index bf0e7984..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/InitTests/GCP/GCPInitSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.init(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPInitSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/L0CompareVersions.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/L0CompareVersions.ts deleted file mode 100644 index ad11c078..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/L0CompareVersions.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../src/azure-terraform-command-handler'; -import tasks = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -// test cases for compareVersions -if (terraformCommandHandlerAzureRM.compareVersions("0.20.7", "0.20.8") === -1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.7", "0.20.8") should have been -1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.8") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.8") should have been 1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.2.9", "0.2.9") === 0) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.2.9", "0.2.9") should have been 0'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.20.9", "0.20.09") === 0) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.20.9", "0.20.09") should have been 0'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("0.21.9", "0.20.9") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("0.21.9", "0.20.9") should have been 1'); -} - -if (terraformCommandHandlerAzureRM.compareVersions("1.20.10", "0.20.11") === 1) { - tasks.setResult(tasks.TaskResult.Succeeded, 'compareVersions("1.20.10", "0.20.11") should have been 1'); -} diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/MultipleProviderWarning.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/MultipleProviderWarning.ts deleted file mode 100644 index 6c5a5590..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/MultipleProviderWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './MultipleProviderWarningL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm\nprovider aws\nprovider gcp" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts deleted file mode 100644 index 12e01c99..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/MultipleProviderWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'MultipleProviderWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/SingleProviderNoWarning.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/SingleProviderNoWarning.ts deleted file mode 100644 index ff8c8af5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/SingleProviderNoWarning.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './SingleProviderNoWarningL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts deleted file mode 100644 index 5ddc2069..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/MultipleProviderTests/SingleProviderNoWarningL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from '../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.warnIfMultipleProviders(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'SingleProviderNoWarningL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 01eb4474..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index 37a76b20..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index 1f63748b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 18c3f1d4..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts deleted file mode 100644 index 0319b6c7..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index c041579c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,39 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSPlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAWS', 'AWS'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AWS'] = 'Basic'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_USERNAME'] = 'DummyUsername'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_PASSWORD'] = 'DummyPassword'; -process.env['ENDPOINT_AUTH_PARAMETER_AWS_REGION'] = 'DummyRegion'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 6666d40c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/AWS/AWSPlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 3b637354..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts deleted file mode 100644 index a8093d6d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailEmptyWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailEmptyWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index a83ce200..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b513f16c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.plan(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzurePlanFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts deleted file mode 100644 index 0f0d823a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index 2d77312d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/Azure/AzurePlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,40 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzurePlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameAzureRM', 'AzureRM'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_AzureRM'] = 'ServicePrincipal'; -process.env['ENDPOINT_DATA_AzureRM_SUBSCRIPTIONID'] = 'DummmySubscriptionId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALID'] = 'DummyServicePrincipalId'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_SERVICEPRINCIPALKEY'] = 'DummyServicePrincipalKey'; -process.env['ENDPOINT_AUTH_PARAMETER_AzureRM_TENANTID'] = 'DummyTenantId'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider azurerm" - }, - "terraform plan -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts deleted file mode 100644 index 2a18603f..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailEmptyWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanFailEmptyWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -detailed-exitcode": { - "code": 1, - "stdout": "Error: No configuration files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts deleted file mode 100644 index 501ebf13..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider aws" - }, - "terraform plan -detailed-exitcode": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts deleted file mode 100644 index 3ba74958..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', '-no-color'); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider gcp" - }, - "terraform plan -no-color -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts deleted file mode 100644 index 9f03de0b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,41 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPPlanSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'plan'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('environmentServiceNameGCP', 'GCP'); -tr.setInput('commandOptions', ''); - -process.env['ENDPOINT_AUTH_SCHEME_GCP'] = 'Jwt'; -process.env['ENDPOINT_DATA_GCP_PROJECT'] = 'DummyProject'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_ISSUER'] = 'Dummyissuer'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_AUDIENCE'] = 'DummyAudience'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_PRIVATEKEY'] = 'DummyPrivateKey'; -process.env['ENDPOINT_AUTH_PARAMETER_GCP_SCOPE'] = 'DummyScope'; - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform providers": { - "code": 0, - "stdout": "provider gcp" - }, - "terraform plan -detailed-exitcode": { - "code": 0, - "stdout": "Executed successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index cfe99ad4..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/PlanTests/GCP/GCPPlanSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.plan(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPPlanSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index 4db0e496..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 7aa2af6c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - await terraformCommandHandlerAWS.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts deleted file mode 100644 index 4b819a80..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index f68aec6e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index 699f585b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index bcc2bb57..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index 07b55455..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AWSValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'aws'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 53d49a0e..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/AWS/AWSValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAWS } from './../../../src/aws-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAWS: TerraformCommandHandlerAWS = new TerraformCommandHandlerAWS(); - -export async function run() { - try { - const response = await terraformCommandHandlerAWS.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AWSValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index ab786a7d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index b5915831..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - await terraformCommandHandlerAzureRM.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts deleted file mode 100644 index a77bc24b..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index 2591fdfc..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index 94f69ba5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index d00984fe..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index f47be4b5..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './AzureValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'azurerm'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index 8e630331..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/Azure/AzureValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerAzureRM } from './../../../src/azure-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerAzureRM: TerraformCommandHandlerAzureRM = new TerraformCommandHandlerAzureRM(); - -export async function run() { - try { - const response = await terraformCommandHandlerAzureRM.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'AzureValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts deleted file mode 100644 index 4158f2eb..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectory.ts +++ /dev/null @@ -1,29 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateFailInvalidWorkingDirectoryL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); -tr.setInput('commandOptions', ''); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 1, - "stdout": "Execution failed: invalid config files" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts deleted file mode 100644 index 91ceb426..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateFailInvalidWorkingDirectoryL0.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - await terraformCommandHandlerGCP.validate(); - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateFailInvalidWorkingDirectoryL0 should have succeeded but failed with error.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts deleted file mode 100644 index 25eda041..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgs.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('commandOptions', '-no-color'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate -no-color": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts deleted file mode 100644 index d05edcf9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts deleted file mode 100644 index bdf86b0c..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDir.ts +++ /dev/null @@ -1,28 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessEmptyWorkingDirL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); -tr.setInput('workingDirectory', 'DummyWorkingDirectory'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts deleted file mode 100644 index 186d1e3d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessEmptyWorkingDirL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessEmptyWorkingDirL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts deleted file mode 100644 index c3536a8d..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgs.ts +++ /dev/null @@ -1,27 +0,0 @@ -import ma = require('azure-pipelines-task-lib/mock-answer'); -import tmrm = require('azure-pipelines-task-lib/mock-run'); -import path = require('path'); - -let tp = path.join(__dirname, './GCPValidateSuccessNoAdditionalArgsL0.js'); -let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); - -tr.setInput('provider', 'gcp'); -tr.setInput('command', 'validate'); - -let a: ma.TaskLibAnswers = { - "which": { - "terraform": "terraform" - }, - "checkPath": { - "terraform": true - }, - "exec": { - "terraform validate": { - "code": 0, - "stdout": "Executed Successfully" - } - } -} - -tr.setAnswers(a); -tr.run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts b/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts deleted file mode 100644 index dc265f90..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/ValidateTests/GCP/GCPValidateSuccessNoAdditionalArgsL0.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { TerraformCommandHandlerGCP } from './../../../src/gcp-terraform-command-handler'; -import tl = require('azure-pipelines-task-lib'); - -let terraformCommandHandlerGCP: TerraformCommandHandlerGCP = new TerraformCommandHandlerGCP(); - -export async function run() { - try { - const response = await terraformCommandHandlerGCP.validate(); - if (response === 0) { - tl.setResult(tl.TaskResult.Succeeded, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded.'); - } else{ - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } - } catch(error) { - tl.setResult(tl.TaskResult.Failed, 'GCPValidateSuccessNoAdditionalArgsL0 should have succeeded but failed.'); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/package-lock.json b/Tasks/TerraformTask/TerraformTaskV5/Tests/package-lock.json deleted file mode 100644 index f4927643..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/package-lock.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "nock": "13.2.4" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==" - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" - }, - "engines": { - "node": ">= 10.13" - } - }, - "node_modules/propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "engines": { - "node": ">= 8" - } - } - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "lodash.set": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", - "integrity": "sha512-4hNPN5jlm/N/HLMCO43v8BXKq9Z7QdAGc/VGrRD61w8gN9g/6jF9A4L1pbUgBLCffi0w9VsXfTOij5x8iTyFvg==" - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "nock": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.2.4.tgz", - "integrity": "sha512-8GPznwxcPNCH/h8B+XZcKjYPXnUV5clOKCjAqyjsiqA++MpNx9E9+t8YPp0MbThO+KauRo7aZJ1WuIZmOrT2Ug==", - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash.set": "^4.3.2", - "propagate": "^2.0.0" - } - }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==" - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV5/Tests/package.json b/Tasks/TerraformTask/TerraformTaskV5/Tests/package.json deleted file mode 100644 index c98b53b9..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/Tests/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "description": "terraform task installer test", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git" - }, - "author": "Microsoft Corporation", - "license": "MIT", - "bugs": { - "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues" - }, - "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme", - "dependencies": { - "nock": "13.2.4" - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV5/ThirdPartyNotices.txt b/Tasks/TerraformTask/TerraformTaskV5/ThirdPartyNotices.txt deleted file mode 100644 index 2b5f4c15..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/ThirdPartyNotices.txt +++ /dev/null @@ -1,345 +0,0 @@ - -THIRD-PARTY SOFTWARE NOTICES AND INFORMATION -Do Not Translate or Localize - -Terraform incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. - -1. @types/mocha (https://github.com/DefinitelyTyped/DefinitelyTyped.git) -2. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -3. @types/q (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) -4. azure-pipelines-task-lib (https://github.com/microsoft/azure-pipelines-task-lib) -5. minimatch (https://github.com/isaacs/minimatch) -6. Mockery (https://github.com/mfncooper/mockery) -7. Q (https://github.com/kriskowal/q) -8. semver (https://github.com/npm/node-semver/) -9. ShellJS (https://github.com/shelljs/shelljs) -10. uuid (https://www.npmjs.com/package/node-uuid) -11. balanced-match (https://github.com/juliangruber/balanced-match) -12. brace-expansion (https://github.com/juliangruber/brace-expansion) -13. concat-map (https://github.com/substack/node-concat-map) - -%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/mocha NOTICES, INFORMATION, AND LICENSE - -%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/node NOTICES, INFORMATION, AND LICENSE - -%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -========================================= -END OF @types/q NOTICES, INFORMATION, AND LICENSE - -%% azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -========================================= -END OF azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE - -%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF minimatch NOTICES, INFORMATION, AND LICENSE - -%% Mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyrights for code authored by Yahoo! Inc. is licensed under the following -terms: - -MIT License - - Copyright (c) 2011 Yahoo! Inc. All Rights Reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. -========================================= -END OF Mockery NOTICES, INFORMATION, AND LICENSE - -%% Q NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright 2009�2014 Kristopher Michael Kowal. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to - deal in the Software without restriction, including without limitation the - rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS - IN THE SOFTWARE. - - The file q.js is prefaced by the following additional third-party subcomponent information: - - /*! - * - * Copyright 2009-2012 Kris Kowal under the terms of the MIT - * license found at http://github.com/kriskowal/q/raw/master/LICENSE - * - * With parts by Tyler Close - * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found - * at http://www.opensource.org/licenses/mit-license.html - * Forked at ref_send.js version: 2009-05-11 - * - * With parts by Mark Miller - * Copyright (C) 2011 Google Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ -========================================= -END OF Q NOTICES, INFORMATION, AND LICENSE - -%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The ISC License - - Copyright (c) Isaac Z. Schlueter and Contributors - - Permission to use, copy, modify, and/or distribute this software for any - purpose with or without fee is hereby granted, provided that the above - copyright notice and this permission notice appear in all copies. - - THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR - IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -========================================= -END OF semver NOTICES, INFORMATION, AND LICENSE - -%% ShellJS NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - Copyright (c) 2012, Artur Adib - All rights reserved. - - You may use this project under the terms of the New BSD license as follows: - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of Artur Adib nor the - names of the contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF ShellJS NOTICES, INFORMATION, AND LICENSE - -%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -The MIT License (MIT) - - Copyright (c) 2010-2012 Robert Kieffer - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF uuid NOTICES, INFORMATION, AND LICENSE - -%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF balanced-match NOTICES, INFORMATION, AND LICENSE - -%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -(MIT) - - Copyright (c) 2013 Julian Gruber - - Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -========================================= -END OF brace-expansion NOTICES, INFORMATION, AND LICENSE - -%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) James Halliday/substack - - This software is released under the MIT license: - - Permission is hereby granted, free of charge, to any person obtaining a copy of - this software and associated documentation files (the "Software"), to deal in - the Software without restriction, including without limitation the rights to - use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - the Software, and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -========================================= -END OF concat-map NOTICES, INFORMATION, AND LICENSE diff --git a/Tasks/TerraformTask/TerraformTaskV5/icon.png b/Tasks/TerraformTask/TerraformTaskV5/icon.png deleted file mode 100644 index 7f0bb0f4..00000000 Binary files a/Tasks/TerraformTask/TerraformTaskV5/icon.png and /dev/null differ diff --git a/Tasks/TerraformTask/TerraformTaskV5/icon.svg b/Tasks/TerraformTask/TerraformTaskV5/icon.svg deleted file mode 100644 index d270ea55..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/icon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/Tasks/TerraformTask/TerraformTaskV5/make.json b/Tasks/TerraformTask/TerraformTaskV5/make.json deleted file mode 100644 index 2c63c085..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/make.json +++ /dev/null @@ -1,2 +0,0 @@ -{ -} diff --git a/Tasks/TerraformTask/TerraformTaskV5/package-lock.json b/Tasks/TerraformTask/TerraformTaskV5/package-lock.json deleted file mode 100644 index a06ac484..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/package-lock.json +++ /dev/null @@ -1,4885 +0,0 @@ -{ - "name": "terraformtask", - "version": "1.0.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "terraformtask", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "azure-devops-node-api": "^12.0.0", - "azure-pipelines-task-lib": "^4.1.0", - "azure-pipelines-tasks-artifacts-common": "^2.225.0", - "del": "^6.0.0" - }, - "devDependencies": { - "@types/mocha": "^2.2.48", - "@types/node": "^10.17.0", - "@types/q": "^1.5.0", - "@types/uuid": "^8.3.1", - "mocha": "^10.8.2", - "ts-loader": "^9.5.2", - "ts-node": "^10.9.1", - "typescript": "^4.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, - "peer": true - }, - "node_modules/@types/fs-extra": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", - "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "peer": true - }, - "node_modules/@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "node_modules/@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", - "dev": true - }, - "node_modules/@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true - }, - "node_modules/acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/azure-devops-node-api": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.4.0.tgz", - "integrity": "sha512-ZrJlnoAOjliBYvO1wV9oa5Saa3h5tfRbvCSpwjqryag7bIeeY5Zl/zGiZBVD+75EumhtY5mOXNBzHvLf6JmdNQ==", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/azure-pipelines-tasks-artifacts-common": { - "version": "2.247.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-artifacts-common/-/azure-pipelines-tasks-artifacts-common-2.247.0.tgz", - "integrity": "sha512-92JVJa3Ogj4fzKPN/DYrAUq6ntUqJkw8OchdjlH2dHuxQnPa5Nj+u5jIp8ruPPfk5D2E2fRIVWAkNc8uo6p1lw==", - "dependencies": { - "@types/fs-extra": "8.0.0", - "@types/mocha": "^5.2.6", - "@types/node": "^16.11.39", - "azure-devops-node-api": "^14.0.2", - "azure-pipelines-task-lib": "^4.13.0", - "fs-extra": "8.1.0", - "node-fetch": "^2.7.0", - "semver": "^6.3.1" - } - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/@types/node": { - "version": "16.18.85", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.85.tgz", - "integrity": "sha512-un7Bj6CPCRLxG2qp+9enNVFuRWCDKKOS6Q/FSpJ4xyrpLNJnRdAQERM2sJ6esaGvl02nK6kiGcMTb0pqknm62g==" - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/azure-devops-node-api": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", - "integrity": "sha512-QhpgjH1LQ+vgDJ7oBwcmsZ3+o4ZpjLVilw0D3oJQpYpRzN+L39lk5jZDLJ464hLUgsDzWn/Ksv7zLLMKLfoBzA==", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "2.1.0" - }, - "engines": { - "node": ">= 16.0.0" - } - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/azure-pipelines-tasks-artifacts-common/node_modules/typed-rest-client": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==", - "dependencies": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - }, - "engines": { - "node": ">= 16.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "peer": true - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001712", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", - "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.134", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.134.tgz", - "integrity": "sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==", - "dev": true, - "peer": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", - "dev": true, - "peer": true - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "peer": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "peer": true - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "peer": true - }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/js-md4": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "peer": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "peer": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "peer": true - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "peer": true - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "peer": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "dependencies": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/ts-loader": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", - "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "typescript": "*", - "webpack": "^5.0.0" - } - }, - "node_modules/ts-loader/node_modules/semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typed-rest-client": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "peer": true, - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "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.", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.99.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", - "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", - "dev": true, - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - } - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "peer": true - }, - "@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - } - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "peer": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "peer": true, - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, - "peer": true - }, - "@types/fs-extra": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", - "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", - "requires": { - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "peer": true - }, - "@types/mocha": { - "version": "2.2.48", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", - "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", - "dev": true - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" - }, - "@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", - "dev": true - }, - "@types/uuid": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "peer": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "peer": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "peer": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "peer": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "peer": true, - "requires": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "peer": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "peer": true - }, - "acorn": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", - "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", - "dev": true - }, - "acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true - }, - "adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==" - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "peer": true, - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "peer": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "azure-devops-node-api": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.4.0.tgz", - "integrity": "sha512-ZrJlnoAOjliBYvO1wV9oa5Saa3h5tfRbvCSpwjqryag7bIeeY5Zl/zGiZBVD+75EumhtY5mOXNBzHvLf6JmdNQ==", - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "requires": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tasks-artifacts-common": { - "version": "2.247.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-artifacts-common/-/azure-pipelines-tasks-artifacts-common-2.247.0.tgz", - "integrity": "sha512-92JVJa3Ogj4fzKPN/DYrAUq6ntUqJkw8OchdjlH2dHuxQnPa5Nj+u5jIp8ruPPfk5D2E2fRIVWAkNc8uo6p1lw==", - "requires": { - "@types/fs-extra": "8.0.0", - "@types/mocha": "^5.2.6", - "@types/node": "^16.11.39", - "azure-devops-node-api": "^14.0.2", - "azure-pipelines-task-lib": "^4.13.0", - "fs-extra": "8.1.0", - "node-fetch": "^2.7.0", - "semver": "^6.3.1" - }, - "dependencies": { - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "@types/node": { - "version": "16.18.85", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.85.tgz", - "integrity": "sha512-un7Bj6CPCRLxG2qp+9enNVFuRWCDKKOS6Q/FSpJ4xyrpLNJnRdAQERM2sJ6esaGvl02nK6kiGcMTb0pqknm62g==" - }, - "azure-devops-node-api": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", - "integrity": "sha512-QhpgjH1LQ+vgDJ7oBwcmsZ3+o4ZpjLVilw0D3oJQpYpRzN+L39lk5jZDLJ464hLUgsDzWn/Ksv7zLLMKLfoBzA==", - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "2.1.0" - } - }, - "semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" - }, - "typed-rest-client": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==", - "requires": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - } - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "requires": { - "fill-range": "^7.1.1" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserslist": { - "version": "4.24.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz", - "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", - "dev": true, - "peer": true, - "requires": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "peer": true - }, - "call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001712", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001712.tgz", - "integrity": "sha512-MBqPpGYYdQ7/hfKiet9SCI+nmN5/hp4ZzveOJubl5DTAMa5oggjAuoi0Z4onBpKPFI2ePGnQuQIzF3VxDjDJig==", - "dev": true, - "peer": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "peer": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "peer": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "requires": { - "ms": "^2.1.3" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diff": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", - "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "electron-to-chromium": { - "version": "1.5.134", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.134.tgz", - "integrity": "sha512-zSwzrLg3jNP3bwsLqWHmS5z2nIOQ5ngMnfMZOWWtXnqqQkPVyOipxK98w+1beLw1TB+EImPNcG8wVP/cLVs2Og==", - "dev": true, - "peer": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.18.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", - "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "requires": { - "get-intrinsic": "^1.2.4" - } - }, - "es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" - }, - "es-module-lexer": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", - "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", - "dev": true, - "peer": true - }, - "escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "peer": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "peer": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "peer": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "peer": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "peer": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "peer": true - }, - "fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "peer": true - }, - "fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", - "requires": { - "reusify": "^1.0.4" - } - }, - "fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==" - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "requires": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "peer": true - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "requires": { - "get-intrinsic": "^1.1.3" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "requires": { - "es-define-property": "^1.0.0" - } - }, - "has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==" - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "hasown": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz", - "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==", - "requires": { - "function-bind": "^1.1.2" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==" - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "requires": { - "hasown": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "peer": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "js-md4": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==" - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "peer": true - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "peer": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "peer": true - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" - }, - "micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "requires": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "mocha": { - "version": "10.8.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", - "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - } - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "peer": true - }, - "node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-releases": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", - "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", - "dev": true, - "peer": true - }, - "nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "requires": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" - }, - "picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "peer": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" - }, - "qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { - "resolve": "^1.1.6" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "peer": true - }, - "resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "requires": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", - "dev": true, - "peer": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - } - }, - "semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" - }, - "serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-function-length": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", - "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", - "requires": { - "define-data-property": "^1.1.2", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" - } - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", - "requires": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - } - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "peer": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "peer": true - } - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "terser": { - "version": "5.39.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.39.0.tgz", - "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, - "terser-webpack-plugin": { - "version": "5.3.14", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", - "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "dependencies": { - "@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "peer": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - } - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "requires": { - "utf8-byte-length": "^1.0.1" - } - }, - "ts-loader": { - "version": "9.5.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.2.tgz", - "integrity": "sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4", - "source-map": "^0.7.4" - }, - "dependencies": { - "semver": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", - "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true - } - } - }, - "ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" - }, - "typed-rest-client": { - "version": "1.8.11", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", - "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "update-browserslist-db": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", - "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", - "dev": true, - "peer": true, - "requires": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - } - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", - "dev": true, - "peer": true, - "requires": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "webpack": { - "version": "5.99.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.99.5.tgz", - "integrity": "sha512-q+vHBa6H9qwBLUlHL4Y7L0L1/LlyBKZtS9FHNCQmtayxjI5RKC9yD8gpvLeqGv5lCQp1Re04yi0MF40pf30Pvg==", - "dev": true, - "peer": true, - "requires": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - } - }, - "webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "peer": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "workerpool": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", - "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/aws-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV5/src/aws-terraform-command-handler.ts deleted file mode 100644 index 4c6b3e97..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/src/aws-terraform-command-handler.ts +++ /dev/null @@ -1,35 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; - -export class TerraformCommandHandlerAWS extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "aws"; - } - - private setupBackend(backendServiceName: string) { - this.backendConfig.set('bucket', tasks.getInput("backendAWSBucketName", true)); - this.backendConfig.set('key', tasks.getInput("backendAWSKey", true)); - this.backendConfig.set('region', tasks.getEndpointAuthorizationParameter(backendServiceName, "region", true)); - this.backendConfig.set('access_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "username", true)); - this.backendConfig.set('secret_key', tasks.getEndpointAuthorizationParameter(backendServiceName, "password", true)); - } - - public async handleBackend(terraformToolRunner: ToolRunner) : Promise { - let backendServiceName = tasks.getInput("backendServiceAWS", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public async handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise { - if (command.serviceProvidername) { - process.env['AWS_ACCESS_KEY_ID'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "username", false); - process.env['AWS_SECRET_ACCESS_KEY'] = tasks.getEndpointAuthorizationParameter(command.serviceProvidername, "password", false); - } - } -} \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/index.ts b/Tasks/TerraformTask/TerraformTaskV5/src/index.ts deleted file mode 100644 index 7407a745..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/src/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ParentCommandHandler} from './parent-handler'; -import path = require('path'); - -async function run() { - tasks.setResourcePath(path.join(__dirname, '..', 'task.json')); - - let parentHandler = new ParentCommandHandler(); - try { - await parentHandler.execute(tasks.getInput("provider"), tasks.getInput("command")); - tasks.setResult(tasks.TaskResult.Succeeded, ""); - } catch (error) { - tasks.setResult(tasks.TaskResult.Failed, error); - } -} - -run(); \ No newline at end of file diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/oci-terraform-command-handler.ts b/Tasks/TerraformTask/TerraformTaskV5/src/oci-terraform-command-handler.ts deleted file mode 100644 index 347f9d79..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/src/oci-terraform-command-handler.ts +++ /dev/null @@ -1,72 +0,0 @@ -import tasks = require('azure-pipelines-task-lib/task'); -import {ToolRunner} from 'azure-pipelines-task-lib/toolrunner'; -import {TerraformAuthorizationCommandInitializer} from './terraform-commands'; -import {BaseTerraformCommandHandler} from './base-terraform-command-handler'; -import path = require('path'); -import * as uuidV4 from 'uuid/v4'; - -export class TerraformCommandHandlerOCI extends BaseTerraformCommandHandler { - constructor() { - super(); - this.providerName = "oci"; - } - - private getPrivateKeyFilePath(privateKey: string) { - // This is a bit of a hack but spaces need to be converted to line breaks to make it work - privateKey = privateKey.replace('-----BEGIN PRIVATE KEY-----', '_begin_'); - privateKey = privateKey.replace('-----END PRIVATE KEY-----', '_end_'); - while(privateKey.indexOf(' ') > -1) - { - privateKey = privateKey.replace(' ', '\n'); - } - privateKey = privateKey.replace('_begin_', '-----BEGIN PRIVATE KEY-----'); - privateKey = privateKey.replace('_end_', '-----END PRIVATE KEY-----'); - const privateKeyFilePath = path.resolve(`keyfile-${uuidV4()}.pem`); - tasks.writeFile(privateKeyFilePath, privateKey); - return privateKeyFilePath; - } - - private setupBackend(backendServiceName: string) { - // Unfortunately this seems not to work with OCI provider for the tf statefile - // https://developer.hashicorp.com/terraform/language/settings/backends/configuration#command-line-key-value-pairs - //this.backendConfig.set('address', tasks.getInput("PAR url", true)); - //this.backendConfig.set('path', tasks.getInput("PAR path", true)); - //this.backendConfig.set('scheme', 'https'); - //PAR = OCI Object Storage preauthenticated request (for the statefile bucket) - - // Instead, will create a backend.tf config file for it in-flight when generate option was selected 'yes' (the default setting) - if(tasks.getInput("backendOCIConfigGenerate", true) == 'yes') - { - tasks.debug('Generating backend tf statefile config.'); - var config = ""; - config = config + "terraform {\n backend \"http\" {\n"; - config = config + " address = \"" + tasks.getInput("backendOCIPar", true) + "\"\n"; - config = config + " update_method = \"PUT\"\n }\n }\n"; - - const workingDirectory = tasks.getInput("workingDirectory"); - const tfConfigyFilePath = path.resolve(`${workingDirectory}/config-${uuidV4()}.tf`); - tasks.writeFile(tfConfigyFilePath, config); - tasks.debug('Generating backend tf statefile config done.'); - } - } - - public async handleBackend(terraformToolRunner: ToolRunner) : Promise { - let backendServiceName = tasks.getInput("backendServiceOCI", true); - this.setupBackend(backendServiceName); - - for (let [key, value] of this.backendConfig.entries()) { - terraformToolRunner.arg(`-backend-config=${key}=${value}`); - } - } - - public async handleProvider(command: TerraformAuthorizationCommandInitializer) : Promise { - if (command.serviceProvidername) { - let privateKeyFilePath = this.getPrivateKeyFilePath(tasks.getEndpointDataParameter(command.serviceProvidername, "privateKey", false)); - process.env['TF_VAR_tenancy_ocid'] = tasks.getEndpointDataParameter(command.serviceProvidername, "tenancy", false); - process.env['TF_VAR_user_ocid'] = tasks.getEndpointDataParameter(command.serviceProvidername, "user", false); - process.env['TF_VAR_region'] = tasks.getEndpointDataParameter(command.serviceProvidername, "region", false); - process.env['TF_VAR_fingerprint'] = tasks.getEndpointDataParameter(command.serviceProvidername, "fingerprint", false); - process.env['TF_VAR_private_key_path'] = `${privateKeyFilePath}`; - } - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV5/src/terraform.ts b/Tasks/TerraformTask/TerraformTaskV5/src/terraform.ts deleted file mode 100644 index 59ea03a6..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/src/terraform.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner' -import { TerraformBaseCommandInitializer } from './terraform-commands' - -export interface ITerraformToolHandler { - createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner; -} - -export class TerraformToolHandler implements ITerraformToolHandler { - private readonly tasks: any; - - constructor(tasks: any) { - this.tasks = tasks; - } - - public createToolRunner(command?: TerraformBaseCommandInitializer): ToolRunner { - let terraformPath; - try { - terraformPath = this.tasks.which("terraform", true); - } catch(err) { - throw new Error(this.tasks.loc("TerraformToolNotFound")); - } - - let terraformToolRunner: ToolRunner = this.tasks.tool(terraformPath); - if (command) { - terraformToolRunner.arg(command.name); - if (command.additionalArgs) { - terraformToolRunner.line(command.additionalArgs); - } - } - - return terraformToolRunner; - } -} diff --git a/Tasks/TerraformTask/TerraformTaskV5/tsconfig.json b/Tasks/TerraformTask/TerraformTaskV5/tsconfig.json deleted file mode 100644 index cadceb7a..00000000 --- a/Tasks/TerraformTask/TerraformTaskV5/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "compilerOptions": { - "target": "ES6", - "module": "commonjs", - "skipLibCheck": true - } -} diff --git a/azure-devops-extension.json b/azure-devops-extension.json index c5076127..3e1729f8 100644 --- a/azure-devops-extension.json +++ b/azure-devops-extension.json @@ -1,20 +1,21 @@ { "manifestVersion": 1, - "id": "custom-terraform-tasks", - "name": "Terraform", + "id": "custom-opentofu-tasks", + "name": "OpenTofu", "version": "0.1.34", - "publisher": "ms-devlabs", + "publisher": "cotality", "targets": [ { "id": "Microsoft.VisualStudio.Services" } ], - "description": "Install terraform and run terraform commands to manage resources on Azure, AWS, GCP and OCI.", - "public": true, + "description": "OpenTofu tasks for Azure DevOps. Based on Microsoft's Terraform extension.", + "public": false, "categories": [ "Azure Pipelines" ], "Tags": [ + "OpenTofu", "Terraform", "Azure", "AWS", @@ -67,10 +68,10 @@ }, "files": [ { - "path": "Tasks/TerraformTask" + "path": "Tasks/OpenTofuTask" }, { - "path": "Tasks/TerraformInstaller" + "path": "Tasks/OpenTofuInstaller" }, { "path": "images/1_AWS_service_endpoint.PNG", @@ -111,23 +112,23 @@ }, "contributions": [ { - "id": "custom-terraform-installer-task", + "id": "custom-opentofu-installer-task", "type": "ms.vss-distributed-task.task", "targets": [ "ms.vss-distributed-task.tasks" ], "properties": { - "name": "Tasks/TerraformInstaller" + "name": "Tasks/OpenTofuInstaller" } }, { - "id": "custom-terraform-release-task", + "id": "custom-opentofu-release-task", "type": "ms.vss-distributed-task.task", "targets": [ "ms.vss-distributed-task.tasks" ], "properties": { - "name": "Tasks/TerraformTask" + "name": "Tasks/OpenTofuTask" } }, { @@ -139,7 +140,7 @@ ], "properties": { "name": "AWSServiceEndpoint", - "displayName": "AWS for Terraform", + "displayName": "AWS for OpenTofu", "url": { "displayName": "Server Url", "helpText": "AWS homepage", @@ -219,7 +220,7 @@ ], "properties": { "name": "GoogleCloudServiceEndpoint", - "displayName": "GCP for Terraform", + "displayName": "GCP for OpenTofu", "helpMarkDown": "[Get JSON Key File](https://console.cloud.google.com/iam-admin/serviceaccounts)", "url": { "displayName": "Server Url", @@ -289,7 +290,7 @@ ], "properties": { "name": "OracleCloudInfrastructureServiceEndpoint", - "displayName": "OCI for Terraform", + "displayName": "OCI for OpenTofu", "helpMarkDown": "", "url": { "displayName": "Server Url", diff --git a/configs/dev.json b/configs/dev.json index dc8661b3..d7cc01ae 100644 --- a/configs/dev.json +++ b/configs/dev.json @@ -1,6 +1,6 @@ { - "id": "custom-terraform-tasks2", - "name": "Terraform (Dev)", + "id": "custom-opentofu-tasks2", + "name": "OpenTofu (Dev)", "public": false, - "publisher": "solidify-labs" + "publisher": "cotality" } \ No newline at end of file diff --git a/configs/release.json b/configs/release.json index b0cf6074..6c9fb5fc 100644 --- a/configs/release.json +++ b/configs/release.json @@ -1,6 +1,6 @@ { "galleryFlags": [ - "Public" + "Private" ], - "public": true + "public": false } \ No newline at end of file diff --git a/configs/test.json b/configs/test.json index d776e043..3ef916a6 100644 --- a/configs/test.json +++ b/configs/test.json @@ -1,6 +1,6 @@ { - "id": "custom-terraform-tasks-test", - "name": "Terraform (test)", + "id": "custom-opentofu-tasks-test", + "name": "OpenTofu (test)", "public": false, - "publisher": "solidify-labs" + "publisher": "cotality" } \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 697ca638..1754af51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "Terraform", + "name": "OpenTofu", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "Terraform", + "name": "OpenTofu", "version": "1.0.0", "devDependencies": { "azure-devops-node-api": "^12.0.0", @@ -20,46 +20,12 @@ "webpack-cli": "^4.9.2" } }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -69,6 +35,7 @@ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -77,13 +44,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -97,6 +66,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -106,6 +76,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -119,19 +90,18 @@ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", "dev": true, + "license": "ISC", "dependencies": { "@gar/promisify": "^1.0.1", "semver": "^7.3.5" } }, "node_modules/@npmcli/fs/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -145,6 +115,7 @@ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, + "license": "MIT", "dependencies": { "mkdirp": "^1.0.4", "rimraf": "^3.0.2" @@ -153,71 +124,33 @@ "node": ">=10" } }, - "node_modules/@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==", - "dev": true + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.13.tgz", + "integrity": "sha512-pAeZeUbLE4Z9Vi9wsWV2bYPTweEHeJJy0G4pEjOA/FSvy1Ad5U5Km8iDV6TKre1mjBiVNfAdVHKruP8bAh4Q5A==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/ast": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/helper-module-context": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -228,25 +161,29 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-code-frame": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/wast-printer": "1.9.0" } @@ -255,13 +192,15 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@webassemblyjs/helper-module-context": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0" } @@ -270,13 +209,15 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -289,6 +230,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -298,6 +240,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/long": "4.2.2" } @@ -306,13 +249,15 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -329,6 +274,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-wasm-bytecode": "1.9.0", @@ -342,6 +288,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-buffer": "1.9.0", @@ -354,6 +301,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-api-error": "1.9.0", @@ -368,6 +316,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/floating-point-hex-parser": "1.9.0", @@ -382,6 +331,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/wast-parser": "1.9.0", @@ -393,6 +343,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", "dev": true, + "license": "MIT", "peerDependencies": { "webpack": "4.x.x || 5.x.x", "webpack-cli": "4.x.x" @@ -403,6 +354,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", "dev": true, + "license": "MIT", "dependencies": { "envinfo": "^7.7.3" }, @@ -415,6 +367,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", "dev": true, + "license": "MIT", "peerDependencies": { "webpack-cli": "4.x.x" }, @@ -428,19 +381,22 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -448,11 +404,35 @@ "node": ">=0.4.0" } }, + "node_modules/adm-zip": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -466,6 +446,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -482,6 +463,7 @@ "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": ">=5.0.0" } @@ -491,6 +473,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -500,6 +483,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -512,6 +496,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "normalize-path": "^3.0.0", @@ -525,13 +510,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-1.0.0.tgz", "integrity": "sha512-OKap/l8oElrynRMEbtwubVW5M5G16LKz9Wxo0DYBmce595lao0EbmD4O82j7qo9yukVWMTDriWvgrbt6yPnb9A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/arch": { "version": "2.2.0", @@ -551,13 +538,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/archiver": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.0.3.tgz", "integrity": "sha512-TqHyk3if+6c3elGaLZu+wPMnaY2hm8PYmgmt1J34NZlFyHKwTiSugJFLMfb0K1xbYAgRtDJjjyW3T2p2B1f//g==", "dev": true, + "license": "MIT", "dependencies": { "archiver-utils": "^1.3.0", "async": "^2.0.0", @@ -578,6 +567,7 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", "integrity": "sha512-h+hTREBXcW5e1L9RihGXdH4PHHdGipG/jE2sMZrqIH6BmZAxeGU5IWjVsKhokdCSWX7km6Kkh406zZNEElHFPQ==", "dev": true, + "license": "MIT", "dependencies": { "glob": "^7.0.0", "graceful-fs": "^4.1.0", @@ -595,6 +585,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -607,6 +598,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -616,6 +608,7 @@ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -625,15 +618,34 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -643,21 +655,26 @@ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz", + "integrity": "sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "is-string": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -666,62 +683,73 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" + "minimalistic-assert": "^1.0.0" } }, "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", "dev": true, + "license": "MIT", "dependencies": { - "object-assign": "^4.1.1", - "util": "0.10.3" + "object.assign": "^4.1.4", + "util": "^0.10.4" } }, "node_modules/assert/node_modules/inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" }, "node_modules/assert/node_modules/util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "2.0.1" + "inherits": "2.0.3" } }, "node_modules/assign-symbols": { @@ -729,6 +757,7 @@ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -738,28 +767,41 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.14" } }, "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", "optional": true }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, + "license": "(MIT OR Apache-2.0)", "bin": { "atob": "bin/atob.js" }, @@ -767,40 +809,59 @@ "node": ">= 4.5.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/azure-devops-node-api": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.1.0.tgz", - "integrity": "sha512-VY+G45eNKVJfMIO0uyZfbi4PzUR8JHEfsHQjEUAXUGRkYhhBbhGHjy8cpiyYFxLXc3a4PL5cqgqqV/YD1SaCXg==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dev": true, + "license": "MIT", "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" } }, "node_modules/azure-pipelines-task-lib": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.2.0.tgz", - "integrity": "sha512-WUj3XxTWVKxcphLaIHB8OULXC1GT18EAHkibvF5nQ86+dhOtn/KQW44axV8D+udDSM5HAMZxOLe93CPGBqcC5w==", + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", + "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", "dev": true, + "license": "MIT", "dependencies": { + "adm-zip": "^0.5.10", "minimatch": "3.0.5", - "mockery": "^2.1.0", + "nodejs-file-downloader": "^4.11.1", "q": "^1.5.1", - "semver": "^5.1.0", + "semver": "^5.7.2", "shelljs": "^0.8.5", - "sync-request": "6.1.0", "uuid": "^3.0.1" } }, "node_modules/azure-pipelines-tool-lib": { - "version": "2.0.0-preview", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.0-preview.tgz", - "integrity": "sha512-OeivwKLpLMsvGpZ2H+2UPxFwwqNkV8TzfKByqjYAllzGDAw4BvciAdjCMwkpGdTOnzfPbRpr33sy48kn7RqfKA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.8.tgz", + "integrity": "sha512-yCFxJfZeNPUDCi7dbmiqVvq5lFpZdqB9kzr/wB9sZuE0RvUEhBF51gtzdR9cI5+NOsfkAVWwQJVWvdGQR5I3Wg==", "dev": true, + "license": "MIT", "dependencies": { "@types/semver": "^5.3.0", "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.0.0-preview", + "azure-pipelines-task-lib": "^4.1.0", "semver": "^5.7.0", "semver-compare": "^1.0.0", "typed-rest-client": "^1.8.6", @@ -811,13 +872,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, + "license": "MIT", "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -836,6 +899,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -843,44 +907,6 @@ "node": ">=0.10.0" } }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -899,25 +925,31 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bindings": { @@ -925,6 +957,7 @@ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "file-uri-to-path": "1.0.0" @@ -935,6 +968,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -944,31 +978,35 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz", + "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==", + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -978,13 +1016,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/browserify-aes": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, + "license": "MIT", "dependencies": { "buffer-xor": "^1.0.3", "cipher-base": "^1.0.0", @@ -999,6 +1039,7 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, + "license": "MIT", "dependencies": { "browserify-aes": "^1.0.4", "browserify-des": "^1.0.0", @@ -1010,6 +1051,7 @@ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "des.js": "^1.0.0", @@ -1018,97 +1060,62 @@ } }, "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, + "license": "MIT", "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", "dev": true, + "license": "ISC", "dependencies": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", "create-hash": "^1.2.0", "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", + "elliptic": "^6.5.5", + "hash-base": "~3.0", "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "node_modules/browserify-sign/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.12" } }, - "node_modules/browserify-sign/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/browserify-zlib": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, + "license": "MIT", "dependencies": { "pako": "~1.0.5" } }, "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "license": "MIT", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "node_modules/buffer-alloc": { @@ -1116,6 +1123,7 @@ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, + "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" @@ -1125,13 +1133,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -1140,31 +1150,36 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builtin-status-codes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cacache": { "version": "15.3.0", "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^1.0.0", "@npmcli/move-file": "^1.0.1", @@ -1194,6 +1209,7 @@ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, + "license": "MIT", "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -1210,71 +1226,61 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", - "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", - "dev": true, "engines": { - "node": ">=14.16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/camelcase-keys": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-8.0.2.tgz", - "integrity": "sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "dev": true, + "license": "MIT", "dependencies": { - "camelcase": "^7.0.0", - "map-obj": "^4.3.0", - "quick-lru": "^6.1.1", - "type-fest": "^2.13.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, "engines": { - "node": ">=12.20" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -1285,16 +1291,11 @@ } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "license": "MIT", "optional": true, "dependencies": { "anymatch": "~3.1.2", @@ -1308,6 +1309,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -1317,6 +1321,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "is-glob": "^4.0.1" @@ -1330,27 +1335,33 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/class-utils": { @@ -1358,6 +1369,7 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -1373,6 +1385,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -1380,11 +1393,26 @@ "node": ">=0.10.0" } }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -1394,6 +1422,7 @@ "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", "dev": true, + "license": "MIT", "dependencies": { "arch": "^2.1.0", "execa": "^0.8.0" @@ -1407,6 +1436,7 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -1421,6 +1451,7 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", "dev": true, + "license": "MIT", "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -1434,6 +1465,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -1442,58 +1474,56 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" }, "node_modules/colors": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/compress-commons": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", "integrity": "sha512-SLTU8iWWmcORfUN+4351Z2aZXKJe1tr0jSilPMCZlLPzpdTXnkBW1LevW/MfuANBKJek8Xu9ggqrtVmQrChLtg==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "^0.2.1", "crc32-stream": "^2.0.0", @@ -1509,6 +1539,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -1520,7 +1551,8 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -1530,6 +1562,7 @@ "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -1547,13 +1580,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/copy-concurrently": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.1.1", "fs-write-stream-atomic": "^1.0.8", @@ -1568,6 +1604,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -1579,7 +1616,9 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -1592,6 +1631,7 @@ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1601,6 +1641,7 @@ "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", "dev": true, + "license": "MIT", "dependencies": { "cacache": "^15.0.5", "fast-glob": "^3.2.4", @@ -1630,6 +1671,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -1641,22 +1683,50 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/crc": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.1.0" } }, + "node_modules/crc/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/crc32-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", "integrity": "sha512-UjZSqFCbn+jZUHJIh6Y3vMF7EJLcJWNm4tKDf2peJRwlZKHvkkvOMTvAei6zjU9gO1xONVr3rRFw0gixm2eUng==", "dev": true, + "license": "MIT", "dependencies": { "crc": "^3.4.4", "readable-stream": "^2.0.0" @@ -1670,22 +1740,25 @@ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "elliptic": "^6.5.3" } }, "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/create-hash": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.1", "inherits": "^2.0.1", @@ -1699,6 +1772,7 @@ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, + "license": "MIT", "dependencies": { "cipher-base": "^1.0.3", "create-hash": "^1.1.0", @@ -1709,52 +1783,45 @@ } }, "node_modules/cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "dependencies": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "node_modules/cross-spawn/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/cross-spawn/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - }, "node_modules/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, + "license": "MIT", "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" }, "engines": { - "node": "*" + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/cycle": { @@ -1767,80 +1834,98 @@ } }, "node_modules/cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", + "dev": true, + "license": "MIT" }, - "node_modules/dateformat": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.11.tgz", - "integrity": "sha512-5zcI+Qoul0QgiCcjzsobs9G1c+vHCNaYB2NGa57ZbVnP7bZeKJJgoM/K+I/obaHAmyEL0J8hJafbQ+HFSZnzZA==", + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, + "license": "MIT", "dependencies": { - "get-stdin": "*", - "meow": "*" - }, - "bin": { - "dateformat": "bin/cli.js" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decamelize": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "dev": true, + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, + "license": "MIT", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "node_modules/dateformat": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.11.tgz", + "integrity": "sha512-5zcI+Qoul0QgiCcjzsobs9G1c+vHCNaYB2NGa57ZbVnP7bZeKJJgoM/K+I/obaHAmyEL0J8hJafbQ+HFSZnzZA==", "dev": true, + "dependencies": { + "get-stdin": "*", + "meow": "*" + }, + "bin": { + "dateformat": "bin/cli.js" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decode-uri-component": { @@ -1848,16 +1933,37 @@ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, - "node_modules/define-properties": { + "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { + "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" }, @@ -1873,6 +1979,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -1881,58 +1988,12 @@ "node": ">=0.10.0" } }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" @@ -1943,6 +2004,7 @@ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", @@ -1950,16 +2012,18 @@ } }, "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -1972,28 +2036,46 @@ "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4", "npm": ">=1.2" } }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, + "license": "MIT", "dependencies": { - "end-of-stream": "^1.0.0", + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -2005,25 +2087,28 @@ } }, "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } @@ -2043,10 +2128,11 @@ } }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -2059,6 +2145,7 @@ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", "dev": true, + "license": "MIT", "dependencies": { "prr": "~1.0.1" }, @@ -2066,45 +2153,67 @@ "errno": "cli.js" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -2117,17 +2226,68 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -2141,6 +2301,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -2150,6 +2311,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" @@ -2163,6 +2325,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -2175,6 +2338,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2184,6 +2348,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2193,6 +2358,7 @@ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -2202,6 +2368,7 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, + "license": "MIT", "dependencies": { "md5.js": "^1.3.4", "safe-buffer": "^5.1.1" @@ -2212,6 +2379,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -2225,11 +2393,78 @@ "node": ">=4" } }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/execa/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/execa/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true, + "license": "ISC" + }, "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -2243,11 +2478,22 @@ "node": ">=0.10.0" } }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -2260,6 +2506,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -2267,26 +2514,46 @@ "node": ">=0.10.0" } }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", "dev": true, + "license": "MIT", "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", "dev": true, + "license": "MIT", "dependencies": { - "is-plain-object": "^2.0.4" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" @@ -2297,6 +2564,7 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, + "license": "MIT", "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -2316,6 +2584,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -2328,6 +2597,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -2335,40 +2605,12 @@ "node": ">=0.10.0" } }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2386,19 +2628,21 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -2409,6 +2653,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -2420,22 +2665,25 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } }, "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -2444,20 +2692,24 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true + "deprecated": "This module is no longer supported.", + "dev": true, + "license": "ISC" }, "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -2470,6 +2722,7 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^3.0.2", @@ -2487,6 +2740,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -2495,23 +2749,62 @@ "node": ">=8" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/for-in": { @@ -2519,29 +2812,17 @@ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", "dev": true, + "license": "MIT", "dependencies": { "map-cache": "^0.2.2" }, @@ -2554,6 +2835,7 @@ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -2563,13 +2845,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -2581,7 +2865,9 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.2", "iferr": "^0.1.5", @@ -2593,14 +2879,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2610,21 +2898,28 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -2638,31 +2933,48 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, "engines": { - "node": ">=4" + "node": ">= 0.4" } }, "node_modules/get-stdin": { @@ -2670,6 +2982,7 @@ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -2682,18 +2995,21 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2707,6 +3023,7 @@ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2715,7 +3032,9 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2736,6 +3055,7 @@ "resolved": "https://registry.npmjs.org/glob-exec/-/glob-exec-0.1.1.tgz", "integrity": "sha512-/ZbFcEUsNRPh6PExnQiM1oq80AzREcbHYJvvcqv10as0qiNlVe/Q+gdmsVcaguEclpt2m8EpQNqVpVVLU1UE1w==", "dev": true, + "license": "BSL-1.0", "dependencies": { "glob": "7.1.X", "subarg": "1.0.X" @@ -2748,7 +3068,9 @@ "version": "7.1.7", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2769,6 +3091,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -2781,6 +3104,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2788,11 +3112,29 @@ "node": "*" } }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -2808,38 +3150,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } + "license": "ISC" }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2849,27 +3188,46 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.1" + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2878,12 +3236,13 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2897,6 +3256,7 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", "dev": true, + "license": "MIT", "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -2911,6 +3271,7 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -2924,6 +3285,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -2936,6 +3298,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -2948,6 +3311,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -2956,125 +3320,76 @@ } }, "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.5.tgz", + "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash-base/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">= 6" + "node": ">= 0.10" } }, - "node_modules/hash-base/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", "dev": true, + "license": "MIT", "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", "dev": true, - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, - "dependencies": { - "@types/node": "^10.0.3" + "node": ">= 6" } }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -3093,19 +3408,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/iferr": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -3114,13 +3432,15 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -3140,6 +3460,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -3149,6 +3470,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3157,13 +3479,16 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -3173,17 +3498,19 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3194,47 +3521,73 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3245,6 +3598,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "binary-extensions": "^2.0.0" @@ -3254,13 +3608,14 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3273,13 +3628,15 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3288,48 +3645,61 @@ } }, "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^3.0.2" + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, + "license": "MIT", "dependencies": { - "is-buffer": "^1.1.5" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3339,33 +3709,28 @@ } }, "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dev": true, + "license": "MIT", "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, "engines": { "node": ">=0.10.0" } @@ -3375,15 +3740,52 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -3391,11 +3793,25 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3408,17 +3824,20 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3427,20 +3846,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -3449,14 +3860,30 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -3465,12 +3892,16 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3481,17 +3912,20 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3501,12 +3935,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3515,32 +3952,84 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -3549,19 +4038,22 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3570,25 +4062,22 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jju": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-in-place": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-in-place/-/json-in-place-1.0.1.tgz", "integrity": "sha512-XDFWT1iOlZErTFU0GGRju9g/uzY8BVFVsGsbgiE71Fg2+3c0lK4X4GSRB8PQ527hVkAJ2Z5Qv2sa7Re9iFNYKw==", "dev": true, + "license": "ISC", "dependencies": { "json-lexer": "1.1.1" } @@ -3597,31 +4086,29 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/json-lexer/-/json-lexer-1.1.1.tgz", "integrity": "sha512-kdpvcH1gqYXQEAVFxVwIWZKihrS0o9SjbwW2v8+0p6HA/YSMk5c4BkXdMiz/kDz2QW0XlOSkFKrJsC9KL0Mb5g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3634,6 +4121,7 @@ "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", @@ -3646,6 +4134,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3655,6 +4144,7 @@ "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.0.5" }, @@ -3667,21 +4157,17 @@ "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, + "license": "MIT", "dependencies": { "immediate": "~3.0.5" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, "node_modules/loader-runner": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.3.0 <5.0.0 || >=5.10" } @@ -3691,6 +4177,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -3705,6 +4192,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -3716,13 +4204,15 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3735,6 +4225,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.0.0" }, @@ -3746,10 +4237,11 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -3759,27 +4251,17 @@ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", "dev": true, + "license": "MIT", "dependencies": { "object-visit": "^1.0.0" }, @@ -3787,11 +4269,22 @@ "node": ">=0.10.0" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1", @@ -3803,6 +4296,7 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", "dev": true, + "license": "MIT", "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -3812,26 +4306,13 @@ } }, "node_modules/meow": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-11.0.0.tgz", - "integrity": "sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^8.0.2", - "decamelize": "^6.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^4.0.1", - "read-pkg-up": "^9.1.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^3.1.0", - "yargs-parser": "^21.1.1" - }, + "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3842,17 +4323,19 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3864,6 +4347,7 @@ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.0.0", "brorand": "^1.0.1" @@ -3873,16 +4357,18 @@ } }, "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -3892,6 +4378,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -3899,32 +4386,26 @@ "node": ">= 0.6" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3933,33 +4414,21 @@ } }, "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -3972,6 +4441,7 @@ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -3984,6 +4454,7 @@ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -3996,6 +4467,7 @@ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -4008,6 +4480,7 @@ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -4021,6 +4494,7 @@ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "concat-stream": "^1.5.0", "duplexify": "^3.4.2", @@ -4042,6 +4516,7 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, + "license": "MIT", "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -4050,23 +4525,12 @@ "node": ">=0.10.0" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -4074,17 +4538,13 @@ "node": ">=10" } }, - "node_modules/mockery": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", - "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==", - "dev": true - }, "node_modules/move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.1.1", "copy-concurrently": "^1.0.0", @@ -4099,6 +4559,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -4110,7 +4571,9 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -4119,22 +4582,25 @@ } }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "version": "2.22.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.2.tgz", + "integrity": "sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/nanomatch": { @@ -4142,6 +4608,7 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, + "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -4163,13 +4630,15 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-libs-browser": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, + "license": "MIT", "dependencies": { "assert": "^1.1.1", "browserify-zlib": "^0.2.0", @@ -4196,51 +4665,24 @@ "vm-browserify": "^1.0.1" } }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, "node_modules/node-libs-browser/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", "dev": true, - "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "license": "MIT" }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "node_modules/nodejs-file-downloader": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", + "integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==", "dev": true, + "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "follow-redirects": "^1.15.6", + "https-proxy-agent": "^5.0.0", + "mime-types": "^2.1.27", + "sanitize-filename": "^1.6.3" } }, "node_modules/normalize-path": { @@ -4248,6 +4690,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4257,6 +4700,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^2.0.0" }, @@ -4264,13 +4708,14 @@ "node": ">=4" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, "node_modules/object-copy": { @@ -4278,6 +4723,7 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", "dev": true, + "license": "MIT", "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -4292,6 +4738,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -4299,11 +4746,26 @@ "node": ">=0.10.0" } }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/object-copy/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -4312,10 +4774,14 @@ } }, "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4325,6 +4791,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -4334,6 +4801,7 @@ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.0" }, @@ -4342,14 +4810,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -4360,15 +4831,19 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz", + "integrity": "sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==", "dev": true, + "license": "MIT", "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "gopd": "^1.0.1", + "safe-array-concat": "^1.1.2" }, "engines": { "node": ">= 0.8" @@ -4382,6 +4857,7 @@ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -4394,6 +4870,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -4411,13 +4888,15 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4427,15 +4906,35 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -4445,6 +4944,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -4460,6 +4960,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -4472,6 +4973,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4487,6 +4989,7 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -4502,6 +5005,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4510,13 +5014,15 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true + "dev": true, + "license": "(MIT AND Zlib)" }, "node_modules/parallel-transform": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, + "license": "MIT", "dependencies": { "cyclist": "^1.0.1", "inherits": "^2.0.3", @@ -4524,40 +5030,21 @@ } }, "node_modules/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", "dev": true, + "license": "ISC", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.10" } }, "node_modules/pascalcase": { @@ -4565,6 +5052,7 @@ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4573,13 +5061,15 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/path-exists": { @@ -4587,6 +5077,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4596,55 +5087,96 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", "dev": true, + "license": "MIT", "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" }, "engines": { "node": ">=0.12" } }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -4657,6 +5189,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4666,6 +5199,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -4678,15 +5212,27 @@ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -4695,28 +5241,22 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", "dev": true, - "dependencies": { - "asap": "~2.0.6" - } + "license": "MIT" }, "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/prompt": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", "dev": true, + "license": "MIT", "dependencies": { "@colors/colors": "1.5.0", "async": "3.2.3", @@ -4732,25 +5272,29 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/public-encrypt": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, + "license": "MIT", "dependencies": { "bn.js": "^4.1.0", "browserify-rsa": "^4.0.0", @@ -4761,16 +5305,18 @@ } }, "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz", + "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==", + "dev": true, + "license": "MIT" }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -4781,6 +5327,7 @@ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, + "license": "MIT", "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", @@ -4792,16 +5339,18 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4810,19 +5359,22 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.1.0" }, "engines": { "node": ">=0.6" @@ -4831,16 +5383,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", @@ -4868,25 +5410,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] - }, - "node_modules/quick-lru": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz", - "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + ], + "license": "MIT" }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -4896,6 +5428,7 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, + "license": "MIT", "dependencies": { "randombytes": "^2.0.5", "safe-buffer": "^5.1.0" @@ -4906,6 +5439,7 @@ "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", "dev": true, + "license": "ISC", "dependencies": { "mute-stream": "~0.0.4" }, @@ -4913,194 +5447,12 @@ "node": ">=0.8" } }, - "node_modules/read-pkg": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "dev": true, - "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", - "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", - "dev": true, - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5111,11 +5463,19 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "picomatch": "^2.2.1" @@ -5136,32 +5496,27 @@ "node": ">= 0.10" } }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "dev": true, + "license": "MIT", "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/regex-not": { @@ -5169,6 +5524,7 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -5178,14 +5534,18 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -5198,13 +5558,15 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5214,23 +5576,28 @@ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } }, "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5240,6 +5607,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -5252,6 +5620,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5261,22 +5630,25 @@ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12" } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5287,6 +5659,7 @@ "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", "dev": true, + "license": "Apache 2.0", "engines": { "node": ">= 0.4.0" } @@ -5295,7 +5668,9 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -5311,6 +5686,7 @@ "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, + "license": "MIT", "dependencies": { "hash-base": "^3.0.0", "inherits": "^2.0.1" @@ -5335,6 +5711,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -5344,56 +5721,134 @@ "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.1.1" } }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" }, "node_modules/safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", "dev": true, + "license": "MIT", "dependencies": { "ret": "~0.1.10" } }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "dev": true, + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "license": "ISC" }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -5408,10 +5863,11 @@ } }, "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -5420,22 +5876,74 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -5451,6 +5959,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5458,17 +5967,29 @@ "node": ">=0.10.0" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true, + "license": "MIT" }, "node_modules/sha.js": { "version": "2.4.11", "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, + "license": "(MIT AND BSD-3-Clause)", "dependencies": { "inherits": "^2.0.1", "safe-buffer": "^5.0.1" @@ -5482,6 +6003,7 @@ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -5490,24 +6012,26 @@ } }, "node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/shelljs": { @@ -5515,6 +6039,7 @@ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -5528,14 +6053,76 @@ } }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5545,13 +6132,15 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5561,6 +6150,7 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, + "license": "MIT", "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", @@ -5580,6 +6170,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -5594,6 +6185,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^1.0.0" }, @@ -5601,49 +6193,12 @@ "node": ">=0.10.0" } }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.2.0" }, @@ -5656,6 +6211,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -5663,11 +6219,22 @@ "node": ">=0.10.0" } }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, "node_modules/snapdragon/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -5680,6 +6247,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -5687,11 +6255,43 @@ "node": ">=0.10.0" } }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, "node_modules/snapdragon/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5700,13 +6300,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -5717,6 +6319,7 @@ "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, + "license": "MIT", "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -5730,6 +6333,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -5740,45 +6344,15 @@ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true + "license": "MIT" }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^3.0.0" }, @@ -5791,6 +6365,7 @@ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.1.1" }, @@ -5803,6 +6378,7 @@ "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -5812,6 +6388,7 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -5825,6 +6402,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", "dev": true, + "license": "MIT", "dependencies": { "is-descriptor": "^0.1.0" }, @@ -5832,11 +6410,40 @@ "node": ">=0.10.0" } }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/stream-browserify": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "~2.0.1", "readable-stream": "^2.0.2" @@ -5847,6 +6454,7 @@ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "stream-shift": "^1.0.0" @@ -5857,6 +6465,7 @@ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, + "license": "MIT", "dependencies": { "builtin-status-codes": "^3.0.0", "inherits": "^2.0.1", @@ -5866,43 +6475,83 @@ } }, "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true, + "license": "MIT" }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -5913,30 +6562,17 @@ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/subarg": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.1.0" } @@ -5946,6 +6582,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -5958,6 +6595,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5965,47 +6603,26 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dev": true, - "dependencies": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "dependencies": { - "get-port": "^3.1.0" - } - }, "node_modules/tapable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/tar": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", - "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^5.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" @@ -6019,6 +6636,7 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -6032,11 +6650,22 @@ "node": ">= 0.8.0" } }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=8" + } + }, "node_modules/terser": { "version": "4.8.1", "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -6050,10 +6679,11 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.6.tgz", + "integrity": "sha512-2lBVf/VMVIddjSn3GqbT90GvIJ/eYXJkt8cTzU7NbjKqK8fwv18Ftr4PlbF46b/e88743iZFL5Dtr/rC4hjIeA==", "dev": true, + "license": "MIT", "dependencies": { "cacache": "^12.0.2", "find-cache-dir": "^2.1.0", @@ -6077,6 +6707,7 @@ "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "dev": true, + "license": "ISC", "dependencies": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -6099,13 +6730,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, + "license": "MIT", "dependencies": { "commondir": "^1.0.1", "make-dir": "^2.0.0", @@ -6120,6 +6753,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^3.0.0" }, @@ -6132,6 +6766,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -6145,6 +6780,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } @@ -6154,6 +6790,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -6167,6 +6804,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -6179,6 +6817,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -6194,6 +6833,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.0.0" }, @@ -6206,6 +6846,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6215,6 +6856,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^3.0.0" }, @@ -6226,7 +6868,9 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6239,6 +6883,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -6253,6 +6898,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -6262,6 +6908,7 @@ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, + "license": "ISC", "dependencies": { "figgy-pudding": "^3.5.1" } @@ -6270,13 +6917,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/tfx-cli": { "version": "0.16.0", "resolved": "https://registry.npmjs.org/tfx-cli/-/tfx-cli-0.16.0.tgz", "integrity": "sha512-kWRIvZiHWqpaCnHmXmJ/+Bzegiaf+q1+lkG0ht2+REW7qmQDaRMgeMeCiQCk0UDudQN1cPhPJSalzy3BwwxGuA==", "dev": true, + "license": "MIT", "dependencies": { "app-root-path": "1.0.0", "archiver": "2.0.3", @@ -6315,6 +6964,7 @@ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz", "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==", "dev": true, + "license": "MIT", "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" @@ -6324,7 +6974,9 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6337,39 +6989,12 @@ "node": "*" } }, - "node_modules/then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "dependencies": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/then-request/node_modules/@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true - }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -6380,6 +7005,7 @@ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", "dev": true, + "license": "MIT", "dependencies": { "setimmediate": "^1.0.4" }, @@ -6392,6 +7018,7 @@ "resolved": "https://registry.npmjs.org/tinytim/-/tinytim-0.1.1.tgz", "integrity": "sha512-NIpsp9lBIxPNzB++HnMmUd4byzJSVbbO4F+As1Gb1IG/YQT5QvmBDjpx8SpDS8fhGC+t+Qw8ldQgbcAIaU+2cA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.2.0" } @@ -6412,19 +7039,37 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" }, "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -6437,6 +7082,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -6449,6 +7095,7 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, + "license": "MIT", "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -6464,6 +7111,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6476,6 +7124,7 @@ "resolved": "https://registry.npmjs.org/tracer/-/tracer-0.7.4.tgz", "integrity": "sha512-yG3Yb4ztlE1CZHNRWcBqjRIVSCXd8fx7HvL9gvlC37tpPrG3I5skNAY3mQApWeQiw0/3m83JWbfagwOAlmP/ww==", "dev": true, + "license": "MIT", "dependencies": { "colors": "1.0.3", "dateformat": "1.0.11", @@ -6490,20 +7139,19 @@ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } }, - "node_modules/trim-newlines": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.0.2.tgz", - "integrity": "sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==", + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" } }, "node_modules/ts-loader": { @@ -6511,6 +7159,7 @@ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.3.0", "enhanced-resolve": "^4.0.0", @@ -6530,6 +7179,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -6551,6 +7201,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6563,6 +7214,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -6578,6 +7230,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -6585,12 +7238,23 @@ "node": ">=0.10.0" } }, - "node_modules/ts-loader/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { + "node_modules/ts-loader/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ts-loader/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "license": "MIT", + "dependencies": { "kind-of": "^3.0.2" }, "engines": { @@ -6602,6 +7266,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -6614,6 +7279,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -6626,6 +7292,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -6640,6 +7307,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -6664,6 +7332,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -6676,34 +7345,103 @@ "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/type-fest": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.2.0.tgz", - "integrity": "sha512-Il3wdLRzWvbAEtocgxGQA9YOoRVeVUGOMBtel5LdEpNeEAol6GJTLw8GbX6Z8EIMfvfhoOXs2bwOijtAZdK5og==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, "engines": { - "node": ">=14.16" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/typed-rest-client": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", - "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "dev": true, + "license": "MIT", "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", @@ -6714,48 +7452,56 @@ "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "dev": true, + "license": "Apache-2.0", "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "dev": true, + "license": "MIT" }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, + "license": "MIT", "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -6766,11 +7512,22 @@ "node": ">=0.10.0" } }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, + "license": "ISC", "dependencies": { "unique-slug": "^2.0.0" } @@ -6780,6 +7537,7 @@ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" } @@ -6789,6 +7547,7 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", "dev": true, + "license": "MIT", "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -6802,6 +7561,7 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", "dev": true, + "license": "MIT", "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -6816,6 +7576,7 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", "dev": true, + "license": "MIT", "dependencies": { "isarray": "1.0.0" }, @@ -6828,6 +7589,7 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6837,6 +7599,7 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=4", @@ -6848,6 +7611,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -6857,38 +7621,53 @@ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", "dev": true, + "license": "MIT", "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true, + "license": "MIT" }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, "node_modules/util": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "2.0.3" } @@ -6897,19 +7676,31 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/util.promisify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", - "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.3.tgz", + "integrity": "sha512-GIEaZ6o86fj09Wtf0VfZ5XP7tmd4t3jM5aZCgmBi231D0DB1AEBa3Aa6MP48DMsAIi96WkpWLimIWVwOjbDMOw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" + "get-intrinsic": "^1.2.6", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "object.getownpropertydescriptors": "^2.1.8", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.8" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6919,7 +7710,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/uuid": { "version": "3.4.0", @@ -6927,25 +7719,17 @@ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "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.", "dev": true, + "license": "MIT", "bin": { "uuid": "bin/uuid" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, "node_modules/validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "version": "13.15.15", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.15.15.tgz", + "integrity": "sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -6954,13 +7738,15 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/walkdir": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", "integrity": "sha512-lMFYXGpf7eg+RInVL021ZbJJT4hqsvsBvq5sZBp874jfhs3IWlA7OPoG0ojQrYcXHuUSi+Nqp6qGN+pPGaMgPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0" } @@ -6970,6 +7756,7 @@ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" @@ -6984,6 +7771,7 @@ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "chokidar": "^2.1.8" @@ -6994,6 +7782,7 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "micromatch": "^3.1.4", @@ -7005,6 +7794,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "remove-trailing-separator": "^1.0.1" @@ -7018,6 +7808,7 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.10.0" @@ -7028,6 +7819,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "arr-flatten": "^1.1.0", @@ -7050,6 +7842,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -7062,8 +7855,8 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "anymatch": "^2.0.0", @@ -7087,6 +7880,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "extend-shallow": "^2.0.1", @@ -7103,6 +7897,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-extendable": "^0.1.0" @@ -7115,9 +7910,10 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -7135,6 +7931,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, + "license": "ISC", "optional": true, "dependencies": { "is-glob": "^3.1.0", @@ -7146,6 +7943,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-extglob": "^2.1.0" @@ -7159,6 +7957,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "binary-extensions": "^1.0.0" @@ -7167,11 +7966,23 @@ "node": ">=0.10.0" } }, + "node_modules/watchpack-chokidar2/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/watchpack-chokidar2/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "kind-of": "^3.0.2" @@ -7185,6 +7996,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-buffer": "^1.1.5" @@ -7198,6 +8010,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "arr-diff": "^4.0.0", @@ -7223,6 +8036,7 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "graceful-fs": "^4.1.11", @@ -7238,6 +8052,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "is-number": "^3.0.0", @@ -7248,10 +8063,11 @@ } }, "node_modules/webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", "dev": true, + "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.9.0", "@webassemblyjs/helper-module-context": "1.9.0", @@ -7301,6 +8117,7 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.2.0", @@ -7348,47 +8165,27 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, - "node_modules/webpack-cli/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/webpack-cli/node_modules/interpret": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } }, - "node_modules/webpack-cli/node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/webpack-cli/node_modules/rechoir": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.9.0" }, @@ -7396,49 +8193,15 @@ "node": ">= 0.10" } }, - "node_modules/webpack-cli/node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-cli/node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/webpack-cli/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", + "flat": "^5.0.2", "wildcard": "^2.0.0" }, "engines": { @@ -7450,6 +8213,7 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, + "license": "MIT", "dependencies": { "source-list-map": "^2.0.0", "source-map": "~0.6.1" @@ -7460,6 +8224,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, + "license": "MIT", "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -7481,6 +8246,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -7493,6 +8259,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", "dev": true, + "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -7508,6 +8275,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dev": true, + "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" }, @@ -7515,11 +8283,22 @@ "node": ">=0.10.0" } }, + "node_modules/webpack/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/webpack/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^3.0.2" }, @@ -7532,6 +8311,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, + "license": "MIT", "dependencies": { "is-buffer": "^1.1.5" }, @@ -7544,6 +8324,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.0" }, @@ -7556,6 +8337,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, + "license": "MIT", "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -7570,6 +8352,7 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", "dev": true, + "license": "MIT", "dependencies": { "errno": "^0.1.3", "readable-stream": "^2.0.1" @@ -7580,6 +8363,7 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, + "license": "MIT", "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -7604,6 +8388,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -7616,6 +8401,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.1.0", "ajv-errors": "^1.0.0", @@ -7630,6 +8416,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -7639,50 +8426,137 @@ } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, + "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" }, "node_modules/winreg": { "version": "0.0.12", "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==", - "dev": true + "dev": true, + "license": "BSD" }, "node_modules/winston": { "version": "2.4.7", "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.7.tgz", "integrity": "sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==", "dev": true, + "license": "MIT", "dependencies": { "async": "^2.6.4", "colors": "1.0.x", @@ -7700,6 +8574,7 @@ "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -7709,6 +8584,7 @@ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, + "license": "MIT", "dependencies": { "errno": "~0.1.7" } @@ -7717,13 +8593,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/xml2js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "dev": true, + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -7737,6 +8615,7 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4.0" } @@ -7746,6 +8625,7 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } @@ -7754,28 +8634,22 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "engines": { - "node": ">=12" - } + "license": "ISC" }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7788,6 +8662,7 @@ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", "integrity": "sha512-2olrDUuPM4NvRIgGPhvrp84f7/HmWR6RiQrgwFF2VctmnssFiogtYL3DcA8Vl2bsSmju79sVXe38TsII7JleUg==", "dev": true, + "license": "MIT", "dependencies": { "archiver-utils": "^1.3.0", "compress-commons": "^1.2.0", @@ -7798,6214 +8673,5 @@ "node": ">= 0.10.0" } } - }, - "dependencies": { - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true - }, - "@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "dev": true - }, - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "dev": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", - "dev": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@types/concat-stream": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz", - "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "dev": true - }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", - "dev": true - }, - "@types/uuid": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", - "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==", - "dev": true - }, - "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", - "dev": true, - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "requires": {} - }, - "@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "requires": { - "envinfo": "^7.7.3" - } - }, - "@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "requires": {} - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "requires": {} - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "optional": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "app-root-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-1.0.0.tgz", - "integrity": "sha512-OKap/l8oElrynRMEbtwubVW5M5G16LKz9Wxo0DYBmce595lao0EbmD4O82j7qo9yukVWMTDriWvgrbt6yPnb9A==", - "dev": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "arch": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", - "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", - "dev": true - }, - "archiver": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-2.0.3.tgz", - "integrity": "sha512-TqHyk3if+6c3elGaLZu+wPMnaY2hm8PYmgmt1J34NZlFyHKwTiSugJFLMfb0K1xbYAgRtDJjjyW3T2p2B1f//g==", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "walkdir": "^0.0.11", - "zip-stream": "^1.2.0" - } - }, - "archiver-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", - "integrity": "sha512-h+hTREBXcW5e1L9RihGXdH4PHHdGipG/jE2sMZrqIH6BmZAxeGU5IWjVsKhokdCSWX7km6Kkh406zZNEElHFPQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash": "^4.8.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true, - "optional": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "azure-devops-node-api": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.1.0.tgz", - "integrity": "sha512-VY+G45eNKVJfMIO0uyZfbi4PzUR8JHEfsHQjEUAXUGRkYhhBbhGHjy8cpiyYFxLXc3a4PL5cqgqqV/YD1SaCXg==", - "dev": true, - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "azure-pipelines-task-lib": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.2.0.tgz", - "integrity": "sha512-WUj3XxTWVKxcphLaIHB8OULXC1GT18EAHkibvF5nQ86+dhOtn/KQW44axV8D+udDSM5HAMZxOLe93CPGBqcC5w==", - "dev": true, - "requires": { - "minimatch": "3.0.5", - "mockery": "^2.1.0", - "q": "^1.5.1", - "semver": "^5.1.0", - "shelljs": "^0.8.5", - "sync-request": "6.1.0", - "uuid": "^3.0.1" - } - }, - "azure-pipelines-tool-lib": { - "version": "2.0.0-preview", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.0-preview.tgz", - "integrity": "sha512-OeivwKLpLMsvGpZ2H+2UPxFwwqNkV8TzfKByqjYAllzGDAw4BvciAdjCMwkpGdTOnzfPbRpr33sy48kn7RqfKA==", - "dev": true, - "requires": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.0.0-preview", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "optional": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } - }, - "bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "requires": { - "pako": "~1.0.5" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "dev": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.0.tgz", - "integrity": "sha512-JToIvOmz6nhGsUhAYScbo2d6Py5wojjNfoxoc2mEVLUdJ70gJK2gnd+ABY1Tc3sVMyK7QDPtN0T/XdlCQWITyQ==", - "dev": true - }, - "camelcase-keys": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-8.0.2.tgz", - "integrity": "sha512-qMKdlOfsjlezMqxkUGGMaWWs17i2HoL15tM+wtx8ld4nLrUwU58TFdvyGOz/piNP842KeO8yXvggVQSdQ828NA==", - "dev": true, - "requires": { - "camelcase": "^7.0.0", - "map-obj": "^4.3.0", - "quick-lru": "^6.1.1", - "type-fest": "^2.13.0" - }, - "dependencies": { - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "clipboardy": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", - "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", - "dev": true, - "requires": { - "arch": "^2.1.0", - "execa": "^0.8.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "dev": true - }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha512-SLTU8iWWmcORfUN+4351Z2aZXKJe1tr0jSilPMCZlLPzpdTXnkBW1LevW/MfuANBKJek8Xu9ggqrtVmQrChLtg==", - "dev": true, - "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true - }, - "copy-webpack-plugin": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.4.1.tgz", - "integrity": "sha512-MXyPCjdPVx5iiWyl40Va3JGh27bKzOTNY3NjUTrosD2q7dR/cLD0013uqJ3BpFbUjyONINjb6qI7nDIJujrMbA==", - "dev": true, - "requires": { - "cacache": "^15.0.5", - "fast-glob": "^3.2.4", - "find-cache-dir": "^3.3.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.1", - "loader-utils": "^2.0.0", - "normalize-path": "^3.0.0", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", - "dev": true, - "requires": { - "buffer": "^5.1.0" - } - }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha512-UjZSqFCbn+jZUHJIh6Y3vMF7EJLcJWNm4tKDf2peJRwlZKHvkkvOMTvAei6zjU9gO1xONVr3rRFw0gixm2eUng==", - "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - } - }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", - "dev": true - } - } - }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha512-TVF6svNzeQCOpjCqsy0/CSy8VgObG3wXusJ73xW2GbG5rGx7lC8zxDSURicsXI2UsGdi2L0QNRCi745/wUDvsA==", - "dev": true - }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", - "dev": true - }, - "dateformat": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.11.tgz", - "integrity": "sha512-5zcI+Qoul0QgiCcjzsobs9G1c+vHCNaYB2NGa57ZbVnP7bZeKJJgoM/K+I/obaHAmyEL0J8hJafbQ+HFSZnzZA==", - "dev": true, - "requires": { - "get-stdin": "*", - "meow": "*" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", - "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, - "decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "requires": { - "path-type": "^4.0.0" - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - } - }, - "envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", - "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", - "dev": true, - "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "requires": { - "is-callable": "^1.1.3" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true - }, - "form-data": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", - "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - } - }, - "functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", - "dev": true - }, - "get-stdin": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", - "dev": true - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", - "dev": true - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "glob-exec": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/glob-exec/-/glob-exec-0.1.1.tgz", - "integrity": "sha512-/ZbFcEUsNRPh6PExnQiM1oq80AzREcbHYJvvcqv10as0qiNlVe/Q+gdmsVcaguEclpt2m8EpQNqVpVVLU1UE1w==", - "dev": true, - "requires": { - "glob": "7.1.X", - "subarg": "1.0.X" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.1" - } - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", - "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", - "dev": true, - "requires": { - "lru-cache": "^7.5.1" - }, - "dependencies": { - "lru-cache": { - "version": "7.14.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.14.1.tgz", - "integrity": "sha512-ysxwsnTKdAx96aTRdhDOCQfDgbHnt8SK0KY8SEjO0wHinhWOFTESbjVCMPbU1uGXg/ch4lifqx0wfjOawU2+WA==", - "dev": true - } - } - }, - "http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", - "dev": true, - "requires": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" - } - }, - "http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", - "dev": true, - "requires": { - "@types/node": "^10.0.3" - } - }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": true - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true - }, - "immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", - "dev": true - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2" - } - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "jju": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", - "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "json-in-place": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-in-place/-/json-in-place-1.0.1.tgz", - "integrity": "sha512-XDFWT1iOlZErTFU0GGRju9g/uzY8BVFVsGsbgiE71Fg2+3c0lK4X4GSRB8PQ527hVkAJ2Z5Qv2sa7Re9iFNYKw==", - "dev": true, - "requires": { - "json-lexer": "1.1.1" - } - }, - "json-lexer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-lexer/-/json-lexer-1.1.1.tgz", - "integrity": "sha512-kdpvcH1gqYXQEAVFxVwIWZKihrS0o9SjbwW2v8+0p6HA/YSMk5c4BkXdMiz/kDz2QW0XlOSkFKrJsC9KL0Mb5g==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true - }, - "jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dev": true, - "requires": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true - }, - "lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "requires": { - "readable-stream": "^2.0.5" - } - }, - "lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dev": true, - "requires": { - "immediate": "~3.0.5" - } - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true - }, - "loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true - }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "meow": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-11.0.0.tgz", - "integrity": "sha512-Cl0yeeIrko6d94KpUo1M+0X1sB14ikoaqlIGuTH1fW4I+E3+YljL54/hb/BWmVfrV9tTV9zU04+xjw08Fh2WkA==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^8.0.2", - "decamelize": "^6.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^4.0.1", - "read-pkg-up": "^9.1.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^3.1.0", - "yargs-parser": "^21.1.1" - } - }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "dev": true - }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, - "minipass": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz", - "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mockery": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", - "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==", - "dev": true - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "dev": true - } - } - }, - "normalize-package-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", - "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", - "dev": true, - "requires": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "requires": { - "path-key": "^2.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - } - }, - "object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dev": true, - "requires": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onecolor": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-2.5.0.tgz", - "integrity": "sha512-OdUvcyPnJ+o35vXb6RIY3fxJITm+EGcfFECanoOKnISTFG+Pl/I1n5TcbxH+KHC310+RopEG4Cccz+naDWAD2A==", - "dev": true - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, - "parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==", - "dev": true - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true, - "optional": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "promise": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", - "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", - "dev": true, - "requires": { - "asap": "~2.0.6" - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true - }, - "prompt": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.3.0.tgz", - "integrity": "sha512-ZkaRWtaLBZl7KKAKndKYUL8WqNT+cQHKRZnT4RYYms48jQkFw3rrBL+/N5K/KtdEveHkxs982MX2BkDKub2ZMg==", - "dev": true, - "requires": { - "@colors/colors": "1.5.0", - "async": "3.2.3", - "read": "1.0.x", - "revalidator": "0.1.x", - "winston": "2.x" - }, - "dependencies": { - "async": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", - "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true - } - } - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", - "dev": true - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true - }, - "qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.1.tgz", - "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", - "dev": true, - "requires": { - "mute-stream": "~0.0.4" - } - }, - "read-pkg": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-7.1.0.tgz", - "integrity": "sha512-5iOehe+WF75IccPc30bWTbpdDQLOCc3Uu8bi3Dte3Eueij81yx1Mrufk8qBx/YAbR4uL1FdUr+7BKXDwEtisXg==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - } - } - }, - "read-pkg-up": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-9.1.0.tgz", - "integrity": "sha512-vaMRR1AC1nrd5CQM0PhlRsO5oc2AAigqr7cCrZ/MW/Rsaflz4RlgzkpL4qoU/z1F6wrbd85iFv1OQj/y5RdGvg==", - "dev": true, - "requires": { - "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" - }, - "dependencies": { - "find-up": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", - "dev": true, - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "locate-path": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz", - "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==", - "dev": true, - "requires": { - "p-locate": "^6.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", - "dev": true, - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", - "dev": true - }, - "type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true - } - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "requires": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true - } - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "revalidator": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", - "integrity": "sha512-xcBILK2pA9oh4SiinPEZfhP8HfrB/ha+a2fTMyl7Om2WjlDVrOQy99N2MXXlUHqGJz4qEu2duXxHJjDWuK/0xg==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "semver-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", - "dev": true - }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true - }, - "shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", - "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "dev": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - } - }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", - "dev": true - }, - "strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "requires": { - "min-indent": "^1.0.1" - } - }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", - "dev": true, - "requires": { - "minimist": "^1.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true - }, - "sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", - "dev": true, - "requires": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" - } - }, - "sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", - "dev": true, - "requires": { - "get-port": "^3.1.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true - }, - "tar": { - "version": "6.1.12", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.12.tgz", - "integrity": "sha512-jU4TdemS31uABHd+Lt5WEYJuzn+TJTCBLljvIAHZOz6M9Os5pJ4dD+vRFLxPa/n3T0iEFzpi+0x1UfuDZYbRMw==", - "dev": true, - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - } - }, - "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "tfx-cli": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/tfx-cli/-/tfx-cli-0.16.0.tgz", - "integrity": "sha512-kWRIvZiHWqpaCnHmXmJ/+Bzegiaf+q1+lkG0ht2+REW7qmQDaRMgeMeCiQCk0UDudQN1cPhPJSalzy3BwwxGuA==", - "dev": true, - "requires": { - "app-root-path": "1.0.0", - "archiver": "2.0.3", - "azure-devops-node-api": "^10.2.2", - "clipboardy": "~1.2.3", - "colors": "~1.3.0", - "glob": "7.1.2", - "jju": "^1.4.0", - "json-in-place": "^1.0.1", - "jszip": "^3.10.1", - "lodash": "^4.17.21", - "minimist": "^1.2.6", - "mkdirp": "^1.0.4", - "onecolor": "^2.5.0", - "os-homedir": "^1.0.1", - "prompt": "^1.3.0", - "read": "^1.0.6", - "shelljs": "^0.8.5", - "tmp": "0.0.26", - "tracer": "0.7.4", - "util.promisify": "^1.0.0", - "uuid": "^3.0.1", - "validator": "^13.7.0", - "winreg": "0.0.12", - "xml2js": "^0.5.0" - }, - "dependencies": { - "azure-devops-node-api": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz", - "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==", - "dev": true, - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "^1.8.4" - } - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", - "dev": true, - "requires": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "dependencies": { - "@types/node": { - "version": "8.10.66", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz", - "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==", - "dev": true - } - } - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, - "tinytim": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/tinytim/-/tinytim-0.1.1.tgz", - "integrity": "sha512-NIpsp9lBIxPNzB++HnMmUd4byzJSVbbO4F+As1Gb1IG/YQT5QvmBDjpx8SpDS8fhGC+t+Qw8ldQgbcAIaU+2cA==", - "dev": true - }, - "tmp": { - "version": "0.0.26", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.26.tgz", - "integrity": "sha512-XYEM7aFncfdEdU4/3jUG2edvFAryxtKbahJXTv8WK34MoOmexbbyNyneT3nY8yPVD3h0J1b5fL6kqlDoyuebQQ==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.0" - } - }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "tracer": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/tracer/-/tracer-0.7.4.tgz", - "integrity": "sha512-yG3Yb4ztlE1CZHNRWcBqjRIVSCXd8fx7HvL9gvlC37tpPrG3I5skNAY3mQApWeQiw0/3m83JWbfagwOAlmP/ww==", - "dev": true, - "requires": { - "colors": "1.0.3", - "dateformat": "1.0.11", - "tinytim": "0.1.1" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true - } - } - }, - "trim-newlines": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.0.2.tgz", - "integrity": "sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==", - "dev": true - }, - "ts-loader": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", - "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "dev": true - }, - "type-fest": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.2.0.tgz", - "integrity": "sha512-Il3wdLRzWvbAEtocgxGQA9YOoRVeVUGOMBtel5LdEpNeEAol6GJTLw8GbX6Z8EIMfvfhoOXs2bwOijtAZdK5og==", - "dev": true - }, - "typed-rest-client": { - "version": "1.8.9", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz", - "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==", - "dev": true, - "requires": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "dev": true, - "peer": true - }, - "unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - } - }, - "underscore": { - "version": "1.13.6", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", - "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "optional": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - } - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "util.promisify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.1.1.tgz", - "integrity": "sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "for-each": "^0.3.3", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.1" - } - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "dev": true - }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "walkdir": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/walkdir/-/walkdir-0.0.11.tgz", - "integrity": "sha512-lMFYXGpf7eg+RInVL021ZbJJT4hqsvsBvq5sZBp874jfhs3IWlA7OPoG0ojQrYcXHuUSi+Nqp6qGN+pPGaMgPQ==", - "dev": true - }, - "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - }, - "dependencies": { - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "optional": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "optional": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "optional": true - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "optional": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "optional": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "optional": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, - "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.0" - } - } - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "optional": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "optional": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "optional": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "webpack": { - "version": "4.46.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz", - "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - } - } - }, - "webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "requires": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } - } - }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, - "winreg": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/winreg/-/winreg-0.0.12.tgz", - "integrity": "sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==", - "dev": true - }, - "winston": { - "version": "2.4.7", - "resolved": "https://registry.npmjs.org/winston/-/winston-2.4.7.tgz", - "integrity": "sha512-vLB4BqzCKDnnZH9PHGoS2ycawueX4HLqENXQitvFHczhgW2vFpSOn31LZtVr1KU8YTw7DS4tM+cqyovxo8taVg==", - "dev": true, - "requires": { - "async": "^2.6.4", - "colors": "1.0.x", - "cycle": "1.0.x", - "eyes": "0.1.x", - "isstream": "0.1.x", - "stack-trace": "0.0.x" - }, - "dependencies": { - "colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", - "dev": true - } - } - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "xml2js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", - "dev": true, - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zip-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.2.0.tgz", - "integrity": "sha512-2olrDUuPM4NvRIgGPhvrp84f7/HmWR6RiQrgwFF2VctmnssFiogtYL3DcA8Vl2bsSmju79sVXe38TsII7JleUg==", - "dev": true, - "requires": { - "archiver-utils": "^1.3.0", - "compress-commons": "^1.2.0", - "lodash": "^4.8.0", - "readable-stream": "^2.0.0" - } - } } } diff --git a/package.json b/package.json index 5f117999..aa6b692f 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "Terraform", + "name": "OpenTofu", "version": "1.0.0", "description": "", "scripts": { @@ -10,14 +10,14 @@ "package:test": "tfx extension create --manifest-globs azure-devops-extension.json --overrides-file ./configs/test.json --root ./build", "package:release": "tfx extension create --manifest-globs azure-devops-extension.json --overrides-file ./configs/release.json --root ./build", "deps": "npm run deps:npm:inst && npm run deps:npm:tasks", - "deps:npm:tasks": "glob-exec --parallel --foreach \"Tasks/TerraformTask/*/tsconfig.json\" -- \"cd {{file.dir}} && npm install --no-update-notifier --no-progress\"", - "deps:npm:inst": "glob-exec --parallel --foreach \"Tasks/TerraformInstaller/*/tsconfig.json\" -- \"cd {{file.dir}} && npm install --no-update-notifier --no-progress\"", + "deps:npm:tasks": "glob-exec --parallel --foreach \"Tasks/OpenTofuTask/*/tsconfig.json\" -- \"cd {{file.dir}} && npm install --no-update-notifier --no-progress\"", + "deps:npm:inst": "glob-exec --parallel --foreach \"Tasks/OpenTofuInstaller/*/tsconfig.json\" -- \"cd {{file.dir}} && npm install --no-update-notifier --no-progress\"", "deps:prune": "npm run deps:prune:inst && npm run deps:prune:tasks", - "deps:prune:tasks": "glob-exec --parallel --foreach \"Tasks/TerraformTask/*/tsconfig.json\" -- \"cd {{file.dir}} && npm prune --production --no-update-notifier --no-progress\"", - "deps:prune:inst": "glob-exec --parallel --foreach \"Tasks/TerraformInstaller/*/tsconfig.json\" -- \"cd {{file.dir}} && npm prune --production --no-update-notifier --no-progress\"", + "deps:prune:tasks": "glob-exec --parallel --foreach \"Tasks/OpenTofuTask/*/tsconfig.json\" -- \"cd {{file.dir}} && npm prune --production --no-update-notifier --no-progress\"", + "deps:prune:inst": "glob-exec --parallel --foreach \"Tasks/OpenTofuInstaller/*/tsconfig.json\" -- \"cd {{file.dir}} && npm prune --production --no-update-notifier --no-progress\"", "compile": "npm run compile:inst && npm run compile:tasks", - "compile:tasks": "glob-exec \"Tasks/TerraformTask/*/tsconfig.json\" -- \"tsc -b {{files.join(' ')}}\"", - "compile:inst": "glob-exec \"Tasks/TerraformInstaller/*/tsconfig.json\" -- \"tsc -b {{files.join(' ')}}\"", + "compile:tasks": "glob-exec \"Tasks/OpenTofuTask/*/tsconfig.json\" -- \"tsc -b {{files.join(' ')}}\"", + "compile:inst": "glob-exec \"Tasks/OpenTofuInstaller/*/tsconfig.json\" -- \"tsc -b {{files.join(' ')}}\"", "webpack": "webpack --config webpack.config.js --progress" }, "devDependencies": { @@ -32,4 +32,4 @@ "webpack-cli": "^4.9.2", "glob-parent": ">=6.0.2" } -} +} \ No newline at end of file