diff --git a/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/GradleTestExecutor.ts b/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/GradleTestExecutor.ts new file mode 100644 index 000000000000..14aead6ef654 --- /dev/null +++ b/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/GradleTestExecutor.ts @@ -0,0 +1,133 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { removeParenthesesFromEnd, replaceLastDotWithHash } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class GradleTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.GRADLE_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + gradlewFilePath: string; + + /* + * Setup the test executor + */ + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + this.gradlewFilePath = tl.getInput('gradleFilePath'); + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('-v'); + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error in Gradle setup: " + operationResult.errorMessage); + tl.debug("Looking for Gradlew file to install Gradle"); + } + + if(operationResult.returnCode === 1){ + operationResult.returnCode = 0; + operationResult.errorMessage = ''; + + try { + this.toolRunnerPath = tl.which(this.gradlewFilePath, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error while looking for user input Gradlew file: " + operationResult.errorMessage); + tl.debug("Looking for gradlew file in the repository"); + } + } + + if(operationResult.returnCode === 1){ + operationResult.returnCode = 0; + operationResult.errorMessage = ''; + + try { + const gradlewExecFileSearchPattern: string = "**/gradlew"; + let workingDirectory = tl.getVariable('System.DefaultWorkingDirectory'); + let os = tl.getVariable('Agent.OS'); + const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern); + this.toolRunnerPath = gradlewPath[0]; + + if (gradlewPath.length == 0) { + operationResult.returnCode = 1; + operationResult.errorMessage = tl.loc('GradlewNotFound'); + tl.debug("Gradlew file not found in the repository"); + return operationResult; + } + + if (gradlewPath.length > 1) { + tl.warning(tl.loc('MultipleMatchingGradlewFound')); + tl.debug(this.toolRunnerPath); + } + + if (os == 'Windows_NT') { + tl.debug('Append .bat extension name to gradlew script for windows agent'); + this.toolRunnerPath += '.bat'; + } + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error while looking for gradlew file in the repository: " + operationResult.errorMessage); + } + + return operationResult; + } + + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + listOfTestsToBeExecuted.forEach(element => { + listOfTestsToBeRan.push(element); + }); + + return operationResult; + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + const args = [] + + args.push('test'); + + for (let testcase of testsToBeExecuted) { + // in some cases found that gradle is including () in test name + testcase = removeParenthesesFromEnd(testcase); + args.push('--tests'); + args.push(testcase); + } + + tl.debug("Executing gradle tests with args :" + args); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } +} \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/MavenTestExecutor.ts b/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/MavenTestExecutor.ts new file mode 100644 index 000000000000..5ce3cf485421 --- /dev/null +++ b/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/MavenTestExecutor.ts @@ -0,0 +1,93 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { replaceLastDotWithHash } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class MavenTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.MVN_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + pomFilePath: string; + + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + this.pomFilePath = tl.getInput('pomFilePath'); + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + return operationResult; + } + + + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('-version'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + listOfTestsToBeExecuted.forEach(element => { + listOfTestsToBeRan.push(element); + }); + + return operationResult; + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + const args = [] + const testsToRun =[] + + for (let tests of testsToBeExecuted) { + const modifiedTest = replaceLastDotWithHash(tests); + testsToRun.push(modifiedTest); + } + + if (testsToRun.length > 0) + { + const testsList = testsToRun.join(',') + const dtest = constants.MAVEN_DTEST; + const combinedTestArgs = dtest + testsList; + + args.push('test'); + args.push(combinedTestArgs); + } + + args.push('-ntp'); + + if (this.pomFilePath) { + args.push('-f'); + args.push(this.pomFilePath); + } + + tl.debug("Executing java maven tests with args :" + args); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } +} \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/PythonTestExecutor.ts b/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/PythonTestExecutor.ts new file mode 100644 index 000000000000..a5f930459220 --- /dev/null +++ b/Tasks/AzureTestPlanV0/Automated Flow/TestExecutors/PythonTestExecutor.ts @@ -0,0 +1,103 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { replaceLastDotWithHash, extractPythonDiscoveredTests, getExecOptions, transformPythonTestStrings } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class PythonTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.PYTEST_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + pomFilePath: string; + + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + return operationResult; + } + + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('--version'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(testsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const args: string[] = ['--collect-only', '-q']; + let discoveryResult = { stdout: ''};; + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(getExecOptions(discoveryResult)); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + + if(operationResult.returnCode === 0){ + // Extract discovered tests from stdout + const discoveredTests: string[] = extractPythonDiscoveredTests(discoveryResult.stdout ?? ''); + var testStringtoFQNMap: Map = new Map(); + + for(let test of discoveredTests){ + testStringtoFQNMap.set(transformPythonTestStrings(test), test); + } + + for(let test of testsToBeExecuted){ + if(!testStringtoFQNMap.has(test)){ + tl.debug(`Test ${test} not found in discovered tests`); + } + else{ + listOfTestsToBeRan.push(testStringtoFQNMap.get(test)); + } + } + + // Variables for debug console logs + const testsToBeExecutedString: string = testsToBeExecuted.join(", "); + const testsToRunString: string = listOfTestsToBeRan.join(", "); + + tl.debug(`Tests to executed are: ${testsToBeExecutedString}`); + tl.debug(`Tests to run are: ${testsToRunString}`); + console.log(`Found ${listOfTestsToBeRan.length} tests to run`); + + return operationResult; + } + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + + tl.debug("Executing python pytest tests with args :" + testsToBeExecuted); + this.toolRunner.arg(testsToBeExecuted); + this.toolRunner.arg('--junitxml=TEST-python-junit.xml'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } + + +} \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/Automated Flow/automatedFlow.ts b/Tasks/AzureTestPlanV0/Automated Flow/automatedFlow.ts new file mode 100644 index 000000000000..7a9c50eb1ed1 --- /dev/null +++ b/Tasks/AzureTestPlanV0/Automated Flow/automatedFlow.ts @@ -0,0 +1,95 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { IOperationResult } from '../Interface/IOperationResult'; +import { ciDictionary } from '../Common/ciEventLogger'; +import { publishAutomatedTestResult } from '../Common/publishAutomatedTests'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import { TestPlanData } from '../testPlanData'; +import * as constant from '../Common/constants'; +import { ITestExecutor } from '../Interface/ITestExecutor'; +import { MavenTestExecutor } from '../Automated Flow/TestExecutors/MavenTestExecutor'; +import { GradleTestExecutor } from './TestExecutors/GradleTestExecutor'; +import { PythonTestExecutor } from './TestExecutors/PythonTestExecutor'; + +export async function newAutomatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { + let listOfTestsFromTestPlan: string[] = testPlanInfo?.listOfFQNOfTestCases ?? []; + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const testLanguage = tl.getInput('testLanguageInput', true); + let testExecutor: ITestExecutor = getTestExecutor(testLanguage); + let listOfTestsDiscovered: string[] = []; + if (listOfTestsFromTestPlan.length > 0) { + automatedTestInvokerResult = await testExecutor.setup(); + + if (automatedTestInvokerResult.returnCode === 0) { + automatedTestInvokerResult = await testExecutor.discoverTests(listOfTestsFromTestPlan, ciData, listOfTestsDiscovered); + + if (automatedTestInvokerResult.returnCode === 0) { + if (listOfTestsDiscovered.length === 0) { + return handleNoTestsFound(testSelectorInput); + } + + automatedTestInvokerResult = await testExecutor.executeTests(listOfTestsDiscovered, ciData); + if (automatedTestInvokerResult.returnCode === 0) { + automatedTestInvokerResult = await publishResults(testPlanInfo, ciData, automatedTestInvokerResult); + } + } + } + } else { + automatedTestInvokerResult = handleNoTestsFound(testSelectorInput); + } + + return automatedTestInvokerResult; +} + +function getTestExecutor(testLanguage: string): ITestExecutor{ + let testExecutor:ITestExecutor; + switch (testLanguage) { + case 'JavaMaven': + testExecutor = new MavenTestExecutor(); + break; + + case 'JavaGradle': + testExecutor = new GradleTestExecutor(); + break; + + case 'Python': + testExecutor = new PythonTestExecutor(); + break; + + case 'Go': + break; + + case 'Jest': + break; + + default: + console.log('Invalid test Language Input selected.'); + } + return testExecutor; +} + +async function publishResults(testPlanInfo: TestPlanData, ciData: ciDictionary, automatedTestInvokerResult: IOperationResult): Promise { + let publishingTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); + publishingTimer.start(); + + try { + await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + publishingTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +function handleNoTestsFound(testSelectorInput: string): IOperationResult { + if (testSelectorInput === 'automatedTests') { + return { returnCode: 1, errorMessage: tl.loc('ErrorFailTaskOnNoAutomatedTestsFound') }; + } else { + console.log('No automated tests found for given test plan inputs '); + return { returnCode: 0, errorMessage: '' }; + } +} + diff --git a/Tasks/AzureTestPlanV0/Common/ApiHelper.ts b/Tasks/AzureTestPlanV0/Common/ApiHelper.ts new file mode 100644 index 000000000000..6732360f4ddd --- /dev/null +++ b/Tasks/AzureTestPlanV0/Common/ApiHelper.ts @@ -0,0 +1,48 @@ +import * as tl from 'azure-pipelines-task-lib'; +import { TestPlanData, personalAccessTokenRegexp } from '../testPlanData'; +import { RunCreateModel } from 'azure-devops-node-api/interfaces/TestInterfaces'; +import * as apim from 'azure-devops-node-api'; + + +export async function getVstsWepApi(): Promise { + let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); + let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); + + let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); + let vsts: apim.WebApi = new apim.WebApi(url, auth); + return vsts; +} + +export function prepareRunModel(testPlanInfo: TestPlanData): RunCreateModel { + + // some create run params may change on based of requirement + let buildId = tl.getVariable('Build.BuildId'); + let testPointIds: number[] = testPlanInfo.listOfManualTestPoints.map(testPoint => parseInt(testPoint.testPoint.id)); + let testPlanId = testPlanInfo.testPlanId; + let testConfigurationId = testPlanInfo.testConfigurationId; + + const currentUtcTime = new Date().toUTCString(); + console.log("date:...", currentUtcTime); + + const testRunRequestBody: RunCreateModel = { + automated: false, + name: 'Manual test run', + plan: { id: testPlanId.toString() }, + configurationIds: [testConfigurationId], + pointIds: testPointIds, + build: { id: buildId }, + iteration: "manual" + }; + + return testRunRequestBody; +} + +export async function getTestResultApiClient() { + + let vsts = await getVstsWepApi(); + let testResultsApi = await vsts.getTestResultsApi(); + + console.log("Test result api client created"); + return testResultsApi; +} + diff --git a/Tasks/AzureTestPlanV0/SimpleTimer.ts b/Tasks/AzureTestPlanV0/Common/SimpleTimer.ts similarity index 100% rename from Tasks/AzureTestPlanV0/SimpleTimer.ts rename to Tasks/AzureTestPlanV0/Common/SimpleTimer.ts diff --git a/Tasks/AzureTestPlanV0/ciEventLogger.ts b/Tasks/AzureTestPlanV0/Common/ciEventLogger.ts similarity index 100% rename from Tasks/AzureTestPlanV0/ciEventLogger.ts rename to Tasks/AzureTestPlanV0/Common/ciEventLogger.ts diff --git a/Tasks/AzureTestPlanV0/constants.ts b/Tasks/AzureTestPlanV0/Common/constants.ts similarity index 100% rename from Tasks/AzureTestPlanV0/constants.ts rename to Tasks/AzureTestPlanV0/Common/constants.ts diff --git a/Tasks/AzureTestPlanV0/publishAutomatedTests.ts b/Tasks/AzureTestPlanV0/Common/publishAutomatedTests.ts similarity index 100% rename from Tasks/AzureTestPlanV0/publishAutomatedTests.ts rename to Tasks/AzureTestPlanV0/Common/publishAutomatedTests.ts diff --git a/Tasks/AzureTestPlanV0/Common/utils.ts b/Tasks/AzureTestPlanV0/Common/utils.ts new file mode 100644 index 000000000000..429e0afd7eac --- /dev/null +++ b/Tasks/AzureTestPlanV0/Common/utils.ts @@ -0,0 +1,119 @@ +import * as tl from 'azure-pipelines-task-lib/task'; +import * as tr from 'azure-pipelines-task-lib/toolrunner'; +import { Writable } from 'stream'; + +export function removeParenthesesFromEnd(inputString) { + // Check if the string ends with parentheses + if (inputString.endsWith("()")) { + // Remove the parentheses from the end + return inputString.slice(0, -2); + } else { + // If no parentheses at the end, return the original string + return inputString; + } +} + +export function replaceLastDotWithHash(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWithHash = inputString.slice(0, lastDotIndex) + '#' + inputString.slice(lastDotIndex + 1); + return stringWithHash; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} + +export function extractPythonDiscoveredTests(output: string): string[] { + var testNames: string[] = []; + var lines: string[] = output.split('\n'); + + for (let i = 0; i < lines.length; i++) { + const line = lines[i].trim(); + if(line && line.includes(".py")){ + testNames.push(line); + } + } + tl.debug("Discovered tests : " + testNames); + return testNames; +} + +export function separateGoPath(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWith = inputString.slice(0, lastDotIndex); + return stringWith; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} +export function separateGoTestName(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWith = inputString.slice(lastDotIndex + 1); + return stringWith; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} + +export function separateJestTestName(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const testName = inputString.slice(lastDotIndex + 1); + return testName; + } else { + return inputString; + } +} + +export function getExecOptions(output?: { stdout: string }): tr.IExecOptions { + const env = process.env; + + const execOptions: tr.IExecOptions = { + env: env, + outStream: output ? new Writable({ + write(chunk, encoding, callback) { + try { + output.stdout += chunk.toString(); + process.stdout.write(chunk); + callback(); + } catch (error) { + callback(error); + } + }, + }) : process.stdout, + }; + + return execOptions; +} + +export function transformPythonTestStrings(automatedTestName: string): string { + // Remove any leading or trailing whitespace + automatedTestName = automatedTestName.trim(); + let updatedAutomatedTestName: string = automatedTestName; + + const index = automatedTestName.indexOf("::"); + if(index !== -1) { + let testFilePath = automatedTestName.substring(0, index); + let testMethod = automatedTestName.substring(index + 2); + + //Check if testfilePath is a python file + if(testFilePath.endsWith(".py")) { + testFilePath = testFilePath.slice(0, -3).replace(/\//g, '.'); + + //Do the same replace with :: to . in testMethod + testMethod = testMethod.replace(/::/g, '.'); + + //Finally generate updatedAutomatedTestName + updatedAutomatedTestName = testFilePath + "." + testMethod; + } + } + return updatedAutomatedTestName; +} \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/Interface/IOperationResult.ts b/Tasks/AzureTestPlanV0/Interface/IOperationResult.ts new file mode 100644 index 000000000000..49e7209432ef --- /dev/null +++ b/Tasks/AzureTestPlanV0/Interface/IOperationResult.ts @@ -0,0 +1,4 @@ +export interface IOperationResult { + returnCode : number; + errorMessage?: string; +} \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/Interface/ITestExecutor.ts b/Tasks/AzureTestPlanV0/Interface/ITestExecutor.ts new file mode 100644 index 000000000000..8a80d78a8637 --- /dev/null +++ b/Tasks/AzureTestPlanV0/Interface/ITestExecutor.ts @@ -0,0 +1,11 @@ +import { ciDictionary } from "../Common/ciEventLogger"; +import { IOperationResult } from "./IOperationResult"; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; + +export interface ITestExecutor { + testRunnerCLI: string; + toolRunner: ToolRunner; + setup(): Promise; + discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise; + executeTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary): Promise; +} \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/Manual Flow/manualTests.ts b/Tasks/AzureTestPlanV0/Manual Flow/manualTests.ts new file mode 100644 index 000000000000..ecc719dcc317 --- /dev/null +++ b/Tasks/AzureTestPlanV0/Manual Flow/manualTests.ts @@ -0,0 +1,47 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { TestPlanData, ManualTestRunData } from '../testPlanData'; +import { getTestResultApiClient, prepareRunModel } from '../Common/ApiHelper'; +import { ciDictionary } from '../Common/ciEventLogger'; +import * as constant from '../Common/constants'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import { IOperationResult } from '../Interface/IOperationResult'; +import { TestCaseResult, TestRun } from 'azure-devops-node-api/interfaces/TestInterfaces'; + +export async function manualTestsFlow(testPlanInfo: TestPlanData, ciData: ciDictionary):Promise { + + let simpleTimer = new SimpleTimer(constant.MANUALTESTS_PUBLISHING); + let manualFlowResult: IOperationResult = { returnCode: 0, errorMessage: "" }; + let projectId = tl.getVariable('System.TeamProjectId'); + + simpleTimer.start(); + + try { + const testRunRequestBody = prepareRunModel(testPlanInfo); + const testResultsApi = await getTestResultApiClient(); + + tl.debug(`Creating test run for project Id: ${projectId}`); + const testRunResponse:TestRun = await testResultsApi.createTestRun( + testRunRequestBody, + projectId) + + tl.debug(`Adding ${testPlanInfo.listOfManualTestPoints.length} manual test results to test run id: ${testRunResponse.id}`); + + const testResultsResponse:TestCaseResult[]= await testResultsApi.addTestResultsToTestRun( + testPlanInfo.listOfManualTestPoints, + projectId, + testRunResponse.id); + + console.log("Test run created with id: ", testRunResponse.id); + console.log("Test results created for run id: ", testResultsResponse[0].testRun.id); + console.log('Test run url: ', testRunResponse.url); + } + catch (error) { + manualFlowResult.errorMessage = error.message || String(error); + manualFlowResult.returnCode = 1; + } + finally{ + simpleTimer.stop(ciData); + } + + return manualFlowResult; +} \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/Invokers/goinvoker.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/goinvoker.ts similarity index 93% rename from Tasks/AzureTestPlanV0/Invokers/goinvoker.ts rename to Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/goinvoker.ts index dea1397075cb..7087d156c5d3 100644 --- a/Tasks/AzureTestPlanV0/Invokers/goinvoker.ts +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/goinvoker.ts @@ -1,6 +1,6 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); import tr = require("azure-pipelines-task-lib/toolrunner"); import { executeGoCommand } from '../testLibExecutor'; diff --git a/_generated/AzureTestPlanV0_Node20/Invokers/gradleinvoker.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/gradleinvoker.ts similarity index 85% rename from _generated/AzureTestPlanV0_Node20/Invokers/gradleinvoker.ts rename to Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/gradleinvoker.ts index 57ec6614b42a..314b5f3df349 100644 --- a/_generated/AzureTestPlanV0_Node20/Invokers/gradleinvoker.ts +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/gradleinvoker.ts @@ -1,7 +1,7 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); -import { execGradleBuild } from '../testLibExecutor'; +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); +import { execGradleBuild } from '../../OldAutomatedFlow/testLibExecutor'; export async function executeGradleTests(testsToBeExecuted: string[], gradleFilePath?: string): Promise { diff --git a/_generated/AzureTestPlanV0_Node20/Invokers/jestinvoker.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/jestinvoker.ts similarity index 95% rename from _generated/AzureTestPlanV0_Node20/Invokers/jestinvoker.ts rename to Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/jestinvoker.ts index 753456bc5262..8cccf09b45e0 100644 --- a/_generated/AzureTestPlanV0_Node20/Invokers/jestinvoker.ts +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/jestinvoker.ts @@ -1,6 +1,6 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); import { executeJestCommand } from '../testLibExecutor'; //Jest command like: >set JEST_JUNIT_OUTPUT_NAME=TEST-Jest0-junit.xml diff --git a/_generated/AzureTestPlanV0_Node20/Invokers/maveninvoker.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/maveninvoker.ts similarity index 89% rename from _generated/AzureTestPlanV0_Node20/Invokers/maveninvoker.ts rename to Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/maveninvoker.ts index 34baa61174a3..05a228b4da58 100644 --- a/_generated/AzureTestPlanV0_Node20/Invokers/maveninvoker.ts +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/maveninvoker.ts @@ -1,8 +1,7 @@ -import { spawn } from '../testexecutor' import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); -import { execMavenBuild } from '../testLibExecutor'; +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); +import { execMavenBuild } from '../../OldAutomatedFlow/testLibExecutor'; export async function executeMavenTests(testsToBeExecuted: string[], pomFilePath?: string):Promise { diff --git a/Tasks/AzureTestPlanV0/Invokers/pythoninvoker.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/pythoninvoker.ts similarity index 97% rename from Tasks/AzureTestPlanV0/Invokers/pythoninvoker.ts rename to Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/pythoninvoker.ts index 925cdc3bcbca..e736a0445515 100644 --- a/Tasks/AzureTestPlanV0/Invokers/pythoninvoker.ts +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/Invokers/pythoninvoker.ts @@ -1,6 +1,6 @@ -import { spawn, SpawnResult } from '../testexecutor'; +import { spawn, SpawnResult } from '../../OldAutomatedFlow/testexecutor'; import tl = require('azure-pipelines-task-lib/task'); -import constants = require('../constants'); +import constants = require('../../Common/constants'); export async function executePythonTests(testsToBeExecuted: string[]):Promise { // Perform test discovery diff --git a/_generated/AzureTestPlanV0_Node20/automatedTestInvoker.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/automatedTestInvoker.ts similarity index 83% rename from _generated/AzureTestPlanV0_Node20/automatedTestInvoker.ts rename to Tasks/AzureTestPlanV0/OldAutomatedFlow/automatedTestInvoker.ts index 7e5859e8d86b..656a76beb279 100644 --- a/_generated/AzureTestPlanV0_Node20/automatedTestInvoker.ts +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/automatedTestInvoker.ts @@ -1,10 +1,10 @@ import * as tl from 'azure-pipelines-task-lib/task' -import { executePythonTests } from './Invokers/pythoninvoker' -import { executeMavenTests } from './Invokers/maveninvoker' -import { executeGradleTests } from './Invokers/gradleinvoker' -import { ciDictionary } from './ciEventLogger'; -import { executeGoTests } from './Invokers/goinvoker'; -import { executeJestTests } from './Invokers/jestinvoker'; +import { executePythonTests } from '../OldAutomatedFlow/Invokers/pythoninvoker' +import { executeMavenTests } from '../OldAutomatedFlow/Invokers/maveninvoker' +import { executeGradleTests } from '../OldAutomatedFlow/Invokers/gradleinvoker' +import { ciDictionary } from '../Common/ciEventLogger'; +import { executeGoTests } from '../OldAutomatedFlow/Invokers/goinvoker'; +import { executeJestTests } from '../OldAutomatedFlow/Invokers/jestinvoker'; export async function testInvoker(testsToBeExecuted: string[], ciData: ciDictionary): Promise { diff --git a/Tasks/AzureTestPlanV0/OldAutomatedFlow/automatedTests.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/automatedTests.ts new file mode 100644 index 000000000000..37feb0ab5ecd --- /dev/null +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/automatedTests.ts @@ -0,0 +1,72 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { testInvoker } from './automatedTestInvoker'; +import { TestPlanData } from '../testPlanData'; +import { publishAutomatedTestResult } from '../Common/publishAutomatedTests'; +import { ciDictionary } from '../Common/ciEventLogger'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import * as constant from '../Common/constants'; +import { IOperationResult } from '../Interface/IOperationResult'; + +export async function automatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { + let listOfTestsToBeExecuted: string[] = testPlanInfo?.listOfFQNOfTestCases ?? []; + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + if (listOfTestsToBeExecuted !== null && listOfTestsToBeExecuted !== undefined && listOfTestsToBeExecuted.length > 0) { + automatedTestInvokerResult = await executeTests(listOfTestsToBeExecuted, ciData); + + if(!automatedTestInvokerResult.returnCode){ + automatedTestInvokerResult = await publishResults(testPlanInfo, ciData, automatedTestInvokerResult); + } + } else { + automatedTestInvokerResult = handleNoTestsFound(testSelectorInput); + } + + return automatedTestInvokerResult; +} + +async function executeTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary): Promise { + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constant.AUTOMATED_EXECUTION); + + tl.debug('Invoking test execution for tests: ' + listOfTestsToBeExecuted); + executionTimer.start(); + + try { + automatedTestInvokerResult.returnCode = await testInvoker(listOfTestsToBeExecuted, ciData); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + executionTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +async function publishResults(testPlanInfo: TestPlanData, ciData: ciDictionary, automatedTestInvokerResult: IOperationResult): Promise { + let publishingTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); + publishingTimer.start(); + + try { + await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + publishingTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +function handleNoTestsFound(testSelectorInput: string): IOperationResult { + if (testSelectorInput === 'automatedTests') { + return { returnCode: 1, errorMessage: tl.loc('ErrorFailTaskOnNoAutomatedTestsFound') }; + } else { + console.log('No automated tests found for given test plan inputs '); + return { returnCode: 0, errorMessage: '' }; + } +} + diff --git a/_generated/AzureTestPlanV0_Node20/testLibExecutor.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/testLibExecutor.ts similarity index 89% rename from _generated/AzureTestPlanV0_Node20/testLibExecutor.ts rename to Tasks/AzureTestPlanV0/OldAutomatedFlow/testLibExecutor.ts index 69a8219d2331..22bef3a0b30f 100644 --- a/_generated/AzureTestPlanV0_Node20/testLibExecutor.ts +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/testLibExecutor.ts @@ -82,7 +82,7 @@ export async function execMavenBuild(args: string[]): Promise { try { // 1. Check that Maven exists by executing it to retrieve its version. - await mvnGetVersion.exec(); + await mvnGetVersion.execAsync(); // Setup Maven Executable to run list of test runs provided as input var mvnRun = tl.tool(mvnExec); @@ -90,7 +90,7 @@ export async function execMavenBuild(args: string[]): Promise { mvnRun.arg(args); // 3. Run Maven. Compilation or test errors will cause this to fail. - await mvnRun.exec(getExecOptions()); + await mvnRun.execAsync(getExecOptions()); // Maven build succeeded return 0; // Return 0 indicating success @@ -102,22 +102,10 @@ export async function execMavenBuild(args: string[]): Promise { } function getGradlewExec() { - const gradlewExecFileSearchPattern: string[] = ["**/gradlew"]; + const gradlewExecFileSearchPattern: string = "**/gradlew"; let workingDirectory = tl.getVariable('System.DefaultWorkingDirectory'); - - if (tl.getVariable('System.DefaultWorkingDirectory') && (!path.isAbsolute(workingDirectory))) { - workingDirectory = path.join(tl.getVariable('System.DefaultWorkingDirectory'), workingDirectory); - } - - tl.debug(workingDirectory); - - const findOptions = { - allowBrokenSymbolicLinks: true, - followSpecifiedSymbolicLink: true, - followSymbolicLinks: true - }; - - const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern, findOptions); + let os = tl.getVariable('Agent.OS'); + const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern); if (gradlewPath.length == 0) { tl.setResult(tl.TaskResult.Failed, "Missing gradlew file"); @@ -131,8 +119,8 @@ function getGradlewExec() { tl.debug(gradlewExec); } - if (isWindows) { - tl.debug('Append .bat extension name to gradlew script.'); + if (os == 'Windows_NT') { + tl.debug('Append .bat extension name to gradlew script for windows agent'); gradlewExec += '.bat'; } diff --git a/_generated/AzureTestPlanV0_Node20/testexecutor.ts b/Tasks/AzureTestPlanV0/OldAutomatedFlow/testexecutor.ts similarity index 81% rename from _generated/AzureTestPlanV0_Node20/testexecutor.ts rename to Tasks/AzureTestPlanV0/OldAutomatedFlow/testexecutor.ts index 38061d4b9899..6849796915d5 100644 --- a/_generated/AzureTestPlanV0_Node20/testexecutor.ts +++ b/Tasks/AzureTestPlanV0/OldAutomatedFlow/testexecutor.ts @@ -1,8 +1,4 @@ -import * as path from 'path'; -import * as fs from 'fs'; -import * as semver from "semver" import { spawnSync } from 'child_process' -import tl = require('azure-pipelines-task-lib/task'); export async function spawn(executable: string, args: string[]): Promise { diff --git a/Tasks/AzureTestPlanV0/_buildConfigs/Node20/package-lock.json b/Tasks/AzureTestPlanV0/_buildConfigs/Node20/package-lock.json index 1c8634bd10c4..883631da2eed 100644 --- a/Tasks/AzureTestPlanV0/_buildConfigs/Node20/package-lock.json +++ b/Tasks/AzureTestPlanV0/_buildConfigs/Node20/package-lock.json @@ -29,60 +29,69 @@ }, "node_modules/@azure/msal-common": { "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-common/-/msal-common-13.3.1.tgz", + "integrity": "sha1-ASRlv5QNEjddxHOHt1TM+da5IYA=", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/@types/jsonwebtoken": { "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha1-LAZOywsxKNg30nZKoLEXsP9uRYY=", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/mocha": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-9.1.1.tgz", + "integrity": "sha1-58TxAB7vpLivvR7uJ6I3/uO/KcQ=", + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.11.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", - "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", + "version": "20.17.9", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-20.17.9.tgz", + "integrity": "sha1-XxQdS37hJc3uX67+KN4JU5iGW6s=", + "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/@types/q": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.7.tgz", - "integrity": "sha512-HBPgtzp44867rkL+IzQ3560/E/BlobwCjeXsuKqogrcE99SKgZR4tvBBCuNJZMhUFMz26M7cjKWZg785lllwpA==" + "version": "1.5.8", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.8.tgz", + "integrity": "sha1-lfbGoI8q2Gi6Iw6tHS1/e+PbODc=", + "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha1-FGwqKe59O65L8vyydGNuJkyBPEU=", + "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha1-vYakNhffBZR4fTi3NfVcgFvs8bw=", + "license": "MIT" }, "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==", + "version": "0.5.16", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha1-C15Md58H3t6lgFzcyxFHBx2UqQk=", + "license": "MIT", "engines": { - "node": ">=6.0" + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", + "license": "MIT", "dependencies": { "debug": "4" }, @@ -92,16 +101,18 @@ }, "node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/array-union": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "license": "MIT", "dependencies": { "array-uniq": "^1.0.1" }, @@ -111,83 +122,78 @@ }, "node_modules/array-uniq": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/async-mutex": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.1.tgz", - "integrity": "sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/async-mutex/-/async-mutex-0.4.1.tgz", + "integrity": "sha1-vM9VuW8rr435DteYy1VEofbuTCw=", + "license": "MIT", "dependencies": { "tslib": "^2.4.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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "license": "MIT" }, "node_modules/axios": { "version": "1.7.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", - "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/axios/-/axios-1.7.7.tgz", + "integrity": "sha1-L1VClvmJKnKsjY5MW3nBSpHQpH8=", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/azure-devops-node-api": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.2.0.tgz", - "integrity": "sha512-htza/rAmMNdLWpoFh5kG7CQFaZ17ylDEGCcQCTIu39R33YFCB8LIJNzjIL9Uqudzc5VdU47sxcXxAJvcuwc3Tw==", + "version": "12.5.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha1-OLnv18WsdDVP5Ojb5CaX2wuOhaU=", + "license": "MIT", "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" } }, "node_modules/azure-pipelines-task-lib": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.15.0.tgz", - "integrity": "sha512-Y72FjLTE2CAM9KrBXzc6vjelTBCpdYb2NkyFB0hwksTrhA3q8nsF680dofuTeXztQ94UTpkK27hpgSHnqYf5ZA==", + "version": "4.17.3", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", + "integrity": "sha1-/VMnGollIKefO6iDOcwLNiv51bk=", + "license": "MIT", "dependencies": { "adm-zip": "^0.5.10", "minimatch": "3.0.5", "nodejs-file-downloader": "^4.11.1", "q": "^1.5.1", - "semver": "^5.1.0", + "semver": "^5.7.2", "shelljs": "^0.8.5", "uuid": "^3.0.1" } }, "node_modules/azure-pipelines-tasks-azure-arm-rest": { - "version": "3.242.2", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.242.2.tgz", - "integrity": "sha512-ljPHxC07BIMH9f3EP0+Rd86CCH+GX3TeDoULa1hCQUoMYrSfvx+Q5ywxoMp9riB78h9aUZf93CPuuVc79naUgg==", + "version": "3.251.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.251.0.tgz", + "integrity": "sha1-9989r2zWGXLLREIAQHuYci00+EM=", + "license": "MIT", "dependencies": { "@types/jsonwebtoken": "^8.5.8", "@types/mocha": "^5.2.7", @@ -208,55 +214,40 @@ }, "node_modules/azure-pipelines-tasks-azure-arm-rest/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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=", + "license": "MIT" }, "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/node": { "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", + "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=", + "license": "MIT" }, "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/q": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "engines": { - "node": ">= 6.0.0" - } + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "license": "MIT" }, "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-devops-node-api": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-14.0.1.tgz", - "integrity": "sha512-oVnFfTNmergd3JU852EpGY64d1nAxW8lCyzZqFDPhfQVZkdApBeK/ZMN7yoFiq/C50Ru304X1L/+BFblh2SRJw==", + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", + "integrity": "sha1-7FOT3p+hRjmd6qtpBOQdoD7c4YA=", + "license": "MIT", "dependencies": { "tunnel": "0.0.6", - "typed-rest-client": "^2.0.1" + "typed-rest-client": "2.1.0" }, "engines": { "node": ">= 16.0.0" } }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dependencies": { - "agent-base": "5", - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/typed-rest-client": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.0.2.tgz", - "integrity": "sha512-rmAQM2gZw/PQpK5+5aSs+I6ZBv4PFC2BT1o+0ADS1SgSejA+14EmbI2Lt8uXwkX7oeOMkwFmg0pHKwe8D9IT5A==", + "version": "2.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", + "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", + "license": "MIT", "dependencies": { "des.js": "^1.1.0", "js-md4": "^0.3.2", @@ -269,9 +260,10 @@ } }, "node_modules/azure-pipelines-tasks-docker-common": { - "version": "2.242.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.242.0.tgz", - "integrity": "sha512-GkXAljKFJoHOp6sH4Jqii5btzAcJfRnck8UleT868iND64nX8o1zzbLbknAJGvduBS7bE+nEppb+Km5fAdBoYg==", + "version": "2.247.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.247.0.tgz", + "integrity": "sha1-fs3fLL5BF7J8DZZZwXmsWLs2xUs=", + "license": "MIT", "dependencies": { "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", @@ -285,49 +277,74 @@ }, "node_modules/azure-pipelines-tasks-docker-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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=", + "license": "MIT" }, "node_modules/azure-pipelines-tasks-docker-common/node_modules/@types/node": { "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", + "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=", + "license": "MIT" }, "node_modules/azure-pipelines-tasks-docker-common/node_modules/@types/q": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "license": "MIT" }, "node_modules/azure-pipelines-tasks-docker-common/node_modules/q": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", - "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "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 (http://github.com/kriskowal/q/raw/master/LICENSE)", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" } }, "node_modules/azure-pipelines-tasks-utility-common": { - "version": "3.225.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.225.1.tgz", - "integrity": "sha512-4wtVKuvx2PcQI0W8xkMdS/S+tf9Qu7wMJl4HSTLE1gjQ2x9o/6QbhMogz6O1+8ofxvTqmI4scA7GHKccDAwQpQ==", + "version": "3.246.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.246.0.tgz", + "integrity": "sha1-+AfA6GAxHX81X9Y4YhTuuacwa2A=", + "license": "MIT", "dependencies": { - "@types/node": "^16.11.39", - "azure-pipelines-task-lib": "^4.4.0", - "azure-pipelines-tool-lib": "^2.0.0-preview", + "@types/node": "~16.11.39", + "azure-pipelines-task-lib": "^4.11.0", + "azure-pipelines-tool-lib": "^2.0.7", "js-yaml": "3.13.1", - "semver": "^5.4.1" + "semver": "^5.7.2", + "typed-rest-client": "2.1.0" } }, "node_modules/azure-pipelines-tasks-utility-common/node_modules/@types/node": { - "version": "16.18.79", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.79.tgz", - "integrity": "sha512-Qd7jdLR5zmnIyMhfDrfPqN5tUCvreVpP3Qrf2oSM+F7SNzlb/MwHISGUkdFHtevfkPJ3iAGyeQI/jsbh9EStgQ==" + "version": "16.11.68", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.11.68.tgz", + "integrity": "sha1-MO6SP02UB5PgOA9c5hwL1LcZa2w=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-utility-common/node_modules/typed-rest-client": { + "version": "2.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", + "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", + "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/azure-pipelines-tool-lib": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.6.tgz", - "integrity": "sha512-972uj4vMieY2tHrVowjHDR5N8rvuJP7eIOzchjUz+eHTEtRCLWbQbfJpVxcbfsA+KZJOomqTxgZ3+icS642hqw==", + "version": "2.0.8", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.8.tgz", + "integrity": "sha1-S9vVPAQsrcivQ6v2sNyspzUNDPk=", + "license": "MIT", "dependencies": { "@types/semver": "^5.3.0", "@types/uuid": "^3.4.5", @@ -339,19 +356,22 @@ } }, "node_modules/azure-pipelines-tool-lib/node_modules/@types/uuid": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.12.tgz", - "integrity": "sha512-4mZWvs9415R6KNlPUZaMDgpnNpFZrO7yZoFfVc6phuOpnUlU06KGu4+83e857jfWkYBMNVZF/1HDoG/aEbePow==" + "version": "3.4.13", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-3.4.13.tgz", + "integrity": "sha1-/okOUX+4QGIL4oTuIT6B1wKx92s=", + "license": "MIT" }, "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -359,17 +379,34 @@ }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "license": "BSD-3-Clause" }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha1-MuWJLmNhspsLVFum93YzeNrKKEA=", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha1-Qc/QMrWT45F2pxUzq084SqBP1oE=", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -377,8 +414,9 @@ }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -388,15 +426,17 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "license": "MIT" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/debug/-/debug-4.4.0.tgz", + "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -407,23 +447,11 @@ } } }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/del": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.0.tgz", - "integrity": "sha512-AZDiRb78EEGYCsAZTG3v+CM5q8J0BIs+wI7QeUtyosm+zIMm4XSmp6aI/K7cU9l+YaKpDKN9dYP1xTrNjLQ+LA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/del/-/del-2.2.0.tgz", + "integrity": "sha1-mlDwS/NzJeKDtPROmFM2wlJFa9U=", + "license": "MIT", "dependencies": { "globby": "^4.0.0", "is-path-cwd": "^1.0.0", @@ -439,33 +467,81 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha1-HTf1dm87v/Tuljjocah2jBc7gdo=", + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha1-165mfh3INIL4tw/Q9u78UNow9Yo=", + "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/ecdsa-sig-formatter": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha1-3bVc1HrC4kBwEmC8Ko4x7LZD2UE=", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -476,14 +552,15 @@ }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha1-pgT6EORDv5jKlCKNnuvMLoosjuE=", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -493,28 +570,54 @@ } } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.6", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha1-Q9090Oe0m4Ky38rRDcgkv3/CZdU=", + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -522,8 +625,10 @@ }, "node_modules/glob": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "inflight": "^1.0.4", "inherits": "2", @@ -537,8 +642,9 @@ }, "node_modules/globby": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha512-JPDtMSr0bt25W64q792rvlrSwIaZwqUAhqdYKSr57Wh/xBcQ5JDWLM85ndn+Q1WdBQXLb9YGCl0QN/T0HpqU0A==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/globby/-/globby-4.1.0.tgz", + "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", + "license": "MIT", "dependencies": { "array-union": "^1.0.1", "arrify": "^1.0.0", @@ -552,31 +658,10 @@ } }, "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/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.2.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -585,9 +670,10 @@ } }, "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://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -596,9 +682,10 @@ } }, "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "version": "2.0.2", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=", + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -607,21 +694,33 @@ } }, "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==", + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha1-cCtx+1UgoTKmbeH2dUHZ5iFU2Cs=", + "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "5", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 6.0.0" + } + }, + "node_modules/https-proxy-agent/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha1-6Ps/JClZ20TWO+Zl23qOc5U3oyw=", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" } }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "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" @@ -629,23 +728,29 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "license": "ISC" }, "node_modules/interpret": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=", + "license": "MIT", "engines": { "node": ">= 0.10" } }, "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==", + "version": "2.16.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-core-module/-/is-core-module-2.16.0.tgz", + "integrity": "sha1-bAH/3V4zxJwdKr+pMzSoXLVr2Bw=", + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -653,16 +758,18 @@ }, "node_modules/is-path-cwd": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-path-in-cwd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", + "license": "MIT", "dependencies": { "is-path-inside": "^1.0.0" }, @@ -672,8 +779,9 @@ }, "node_modules/is-path-inside": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "license": "MIT", "dependencies": { "path-is-inside": "^1.0.1" }, @@ -683,13 +791,15 @@ }, "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/js-md4/-/js-md4-0.3.2.tgz", + "integrity": "sha1-zTs9wEWwxARVbIHdtXVsI+WdfPU=", + "license": "MIT" }, "node_modules/js-yaml": { "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -700,8 +810,9 @@ }, "node_modules/jsonwebtoken": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=", + "license": "MIT", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -721,8 +832,9 @@ }, "node_modules/jsonwebtoken/node_modules/semver": { "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-7.6.3.tgz", + "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -732,8 +844,9 @@ }, "node_modules/jwa": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=", + "license": "MIT", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -742,8 +855,9 @@ }, "node_modules/jws": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jws/-/jws-3.2.2.tgz", + "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=", + "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -751,51 +865,69 @@ }, "node_modules/lodash.includes": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "license": "MIT" }, "node_modules/lodash.isinteger": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "license": "MIT" }, "node_modules/lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha1-TgS/h8hapR6Q0HjawiUrTrUmCBc=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -805,13 +937,15 @@ }, "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha1-TajxKQ7g8PjoPWDKafjxNAaGBKM=", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -820,16 +954,18 @@ } }, "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==" + "version": "2.1.3", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/ms/-/ms-2.1.3.tgz", + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "license": "MIT" }, "node_modules/msalv1": { "name": "@azure/msal-node", "version": "1.18.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", - "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-node/-/msal-node-1.18.4.tgz", + "integrity": "sha1-ySGwRHyS+zsMsev1qadvytLsfCE=", "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", + "license": "MIT", "dependencies": { "@azure/msal-common": "13.3.1", "jsonwebtoken": "^9.0.0", @@ -841,19 +977,21 @@ }, "node_modules/msalv1/node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/msalv2": { "name": "@azure/msal-node", - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.12.0.tgz", - "integrity": "sha512-jmk5Im5KujRA2AcyCb0awA3buV8niSrwXZs+NBJWIvxOz76RvNlusGIqi43A0h45BPUy93Qb+CPdpJn82NFTIg==", + "version": "2.16.2", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-node/-/msal-node-2.16.2.tgz", + "integrity": "sha1-Prdo02iD6m+ak5wLW0Z7UY54//w=", + "license": "MIT", "dependencies": { - "@azure/msal-common": "14.14.0", + "@azure/msal-common": "14.16.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -862,25 +1000,28 @@ } }, "node_modules/msalv2/node_modules/@azure/msal-common": { - "version": "14.14.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.14.0.tgz", - "integrity": "sha512-OxcOk9H1/1fktHh6//VCORgSNJc2dCQObTm6JNmL824Z6iZSO6eFo/Bttxe0hETn9B+cr7gDouTQtsRq3YPuSQ==", + "version": "14.16.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-common/-/msal-common-14.16.0.tgz", + "integrity": "sha1-80cPyux4jb5QhZlSzUmTQL2iPXo=", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/msalv2/node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha1-0PD6bj4twdJ+/NitmdVQvalNGH0=", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -897,83 +1038,110 @@ } }, "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==", + "version": "4.13.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", + "integrity": "sha1-2ofDAIHeX/TouGQGLJjN7APmatA=", + "license": "ISC", "dependencies": { - "follow-redirects": "^1.15.1", + "follow-redirects": "^1.15.6", "https-proxy-agent": "^5.0.0", "mime-types": "^2.1.27", "sanitize-filename": "^1.6.3" } }, + "node_modules/nodejs-file-downloader/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha1-xZ7yJKBP6LdU89sAY6Jeow0ABdY=", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "license": "MIT", "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==", + "version": "1.13.3", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha1-8UwYPeURMCQ9bRiuFJN1/1DqSIo=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-is-inside": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "license": "(WTFPL OR MIT)" }, "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=", + "license": "MIT" }, "node_modules/performance-now": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha512-YHk5ez1hmMR5LOkb9iJkLKqoBlL7WD5M8ljC75ZfzXriuBIVNuecaXuU7e+hOwyqf24Wxhh7Vxgt7Hnw9288Tg==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "license": "MIT" }, "node_modules/pify": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/pinkie-promise": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -983,24 +1151,28 @@ }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "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.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.13.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/qs/-/qs-6.13.1.tgz", + "integrity": "sha1-POX8cr06gXG4XJm5PGXdILfRsW4=", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -1011,8 +1183,8 @@ }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dependencies": { "resolve": "^1.1.6" }, @@ -1021,11 +1193,12 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.9", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/resolve/-/resolve-1.22.9.tgz", + "integrity": "sha1-baduTNxXGB+kRxIxQA6IUdCpJPM=", + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -1038,8 +1211,10 @@ }, "node_modules/rimraf": { "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -1049,8 +1224,10 @@ }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-7.2.3.tgz", + "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1068,8 +1245,9 @@ }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1079,8 +1257,8 @@ }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", "funding": [ { "type": "github", @@ -1094,52 +1272,44 @@ "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha1-dV69dSBFkxl34wsgJdNA18kJA3g=", + "license": "WTFPL OR ISC", "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, "node_modules/sax": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sax/-/sax-1.4.1.tgz", + "integrity": "sha1-RMyJiDd/EmME07P8EBDHM7kp7w8=", + "license": "ISC" }, "node_modules/semver": { "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-5.7.2.tgz", + "integrity": "sha1-SNVdtzfDKHzUg14X+hP+rOHEHvg=", + "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==" - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "license": "MIT" }, "node_modules/shelljs": { "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha1-3gVUCNg2G+1mxmnS8ABTjO2O4gw=", + "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", @@ -1154,8 +1324,10 @@ }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-7.2.3.tgz", + "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1173,8 +1345,9 @@ }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1183,13 +1356,72 @@ } }, "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://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha1-w/z/nE2pMnhIczNeyXZfqU/2a8k=", + "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://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha1-EMtZhCYxFdO3oOM2WR4pCoMK+K0=", + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "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://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=", + "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://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=", + "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" @@ -1197,13 +1429,15 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "license": "BSD-3-Clause" }, "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha1-btpL00SjyUrqN21MwxvHcxEDngk=", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1213,34 +1447,39 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "license": "WTFPL", "dependencies": { "utf8-byte-length": "^1.0.1" } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", + "license": "0BSD" }, "node_modules/tunnel": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha1-aQbwLjyR6NhRV58lWr8P1ggAoE0=", + "license": "MIT", "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", @@ -1249,9 +1488,10 @@ }, "node_modules/typescript": { "version": "5.1.6", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", - "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha1-AvisICttrSwN1eCRN0W0ejeZgnQ=", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -1261,38 +1501,44 @@ } }, "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==" + "version": "1.13.7", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha1-lw4zljr5p92iKPF+voOZ5fvmOhA=", + "license": "MIT" }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "6.19.8", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha1-NREcnRQ3q4OnzcCrri8m2I7aCgI=", + "license": "MIT" }, "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==" + "version": "1.0.5", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha1-+fY5ENFVNu4rLV3UZlOJcV6sXB4=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "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==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -1300,13 +1546,15 @@ }, "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==" + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "license": "ISC" }, "node_modules/xml2js": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha1-3QtjAIOqCcFh4lpNCQHisqkptJk=", + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -1317,8 +1565,9 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=", + "license": "MIT", "engines": { "node": ">=4.0" } diff --git a/Tasks/AzureTestPlanV0/automatedTests.ts b/Tasks/AzureTestPlanV0/automatedTests.ts deleted file mode 100644 index e049d1593b90..000000000000 --- a/Tasks/AzureTestPlanV0/automatedTests.ts +++ /dev/null @@ -1,48 +0,0 @@ -import tl = require('azure-pipelines-task-lib/task'); -import { testInvoker } from './automatedTestInvoker'; -import { TestPlanData } from './testPlanData'; -import { publishAutomatedTestResult } from './publishAutomatedTests'; -import { ciDictionary } from './ciEventLogger'; -import { SimpleTimer } from './SimpleTimer'; -import * as constant from './constants'; - -export async function automatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { - let listOfTestsToBeExecuted: string[] = testPlanInfo.listOfFQNOfTestCases; - let testInvokerStatusCode = 0; - - if (listOfTestsToBeExecuted !== null && listOfTestsToBeExecuted !== undefined && listOfTestsToBeExecuted.length > 0) { - tl.debug('Invoking test execution for tests: ' + listOfTestsToBeExecuted); - - var simpleTimer = new SimpleTimer(constant.AUTOMATED_EXECUTION); - simpleTimer.start(); - try { - testInvokerStatusCode = await testInvoker(listOfTestsToBeExecuted, ciData); - } catch (err) { - tl.debug(`Unable to invoke automated test execution. Err:( ${err} )`); - testInvokerStatusCode = 1; - } - simpleTimer.stop(ciData); - - simpleTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); - simpleTimer.start(); - try { - await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); - } catch (err) { - tl.error(`Error while publishing automated Test Results with err : ( ${err} )`); - testInvokerStatusCode = 1; - } - simpleTimer.stop(ciData); - - tl.debug(`Execution Status Code for test Invoker: ${testInvokerStatusCode}`); - return testInvokerStatusCode; - } else { - console.log('No automated tests found for given test plan inputs '); - if (testSelectorInput === 'automatedTests') { - tl.setResult(tl.TaskResult.Failed, tl.loc('ErrorFailTaskOnNoAutomatedTestsFound')); - return 1; - } else { - tl.setResult(tl.TaskResult.Succeeded, 'Successfully triggered manual test execution'); - return 0; - } - } -} diff --git a/Tasks/AzureTestPlanV0/manualTests.ts b/Tasks/AzureTestPlanV0/manualTests.ts deleted file mode 100644 index b55904291ddd..000000000000 --- a/Tasks/AzureTestPlanV0/manualTests.ts +++ /dev/null @@ -1,27 +0,0 @@ -import tl = require('azure-pipelines-task-lib/task'); -import { TestPlanData, createManualTestRun, ManualTestRunData } from './testPlanData'; -import { ciDictionary } from './ciEventLogger'; -import * as constant from './constants'; -import { SimpleTimer } from './SimpleTimer'; - -export async function manualTestsFlow(testPlanInfo: TestPlanData, ciData: ciDictionary):Promise { - - let manualTestRun: ManualTestRunData = { testRunId: 0, runUrl: "" }; - - let simpleTimer = new SimpleTimer(constant.MANUALTESTS_PUBLISHING); - - simpleTimer.start(); - try{ - manualTestRun = await createManualTestRun(testPlanInfo); - } - catch (err){ - tl.debug(`Unable to create Manual Test Run. Err:( ${err} )`); - return 1; - } - simpleTimer.stop(ciData); - - console.log('Test run id created: ', manualTestRun.testRunId); - console.log('Test run url: ', manualTestRun.runUrl); - - return 0; -} \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/package-lock.json b/Tasks/AzureTestPlanV0/package-lock.json index b674cfb4e578..9aa328550ec9 100644 --- a/Tasks/AzureTestPlanV0/package-lock.json +++ b/Tasks/AzureTestPlanV0/package-lock.json @@ -1,123 +1,182 @@ { "name": "azure-tasks-runTestPlan", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@azure/msal-common": { + "packages": { + "": { + "name": "azure-tasks-runTestPlan", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@types/mocha": "^9.1.1", + "@types/node": "^16.11.39", + "@types/q": "^1.0.7", + "@types/uuid": "^8.3.0", + "agent-base": "6.0.2", + "axios": "^1.7.7", + "azure-devops-node-api": "^12.2.0", + "azure-pipelines-task-lib": "^4.15.0", + "azure-pipelines-tasks-docker-common": "^2.242.0", + "azure-pipelines-tasks-utility-common": "^3.212.0", + "azure-pipelines-tool-lib": "^2.0.0-preview", + "performance-now": "0.2.0", + "typed-rest-client": "^1.8.9" + }, + "devDependencies": { + "typescript": "4.9.5" + } + }, + "node_modules/@azure/msal-common": { "version": "13.3.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha1-ASRlv5QNEjddxHOHt1TM+da5IYA=" + "integrity": "sha1-ASRlv5QNEjddxHOHt1TM+da5IYA=", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } }, - "@types/jsonwebtoken": { + "node_modules/@types/jsonwebtoken": { "version": "8.5.9", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", "integrity": "sha1-LAZOywsxKNg30nZKoLEXsP9uRYY=", - "requires": { + "license": "MIT", + "dependencies": { "@types/node": "*" } }, - "@types/mocha": { + "node_modules/@types/mocha": { "version": "9.1.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha1-58TxAB7vpLivvR7uJ6I3/uO/KcQ=" + "integrity": "sha1-58TxAB7vpLivvR7uJ6I3/uO/KcQ=", + "license": "MIT" }, - "@types/node": { + "node_modules/@types/node": { "version": "16.18.122", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.18.122.tgz", - "integrity": "sha1-VJSN2+Ld74FE7hazfxYOP5nDI5c=" + "integrity": "sha1-VJSN2+Ld74FE7hazfxYOP5nDI5c=", + "license": "MIT" }, - "@types/q": { + "node_modules/@types/q": { "version": "1.5.8", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.8.tgz", - "integrity": "sha1-lfbGoI8q2Gi6Iw6tHS1/e+PbODc=" + "integrity": "sha1-lfbGoI8q2Gi6Iw6tHS1/e+PbODc=", + "license": "MIT" }, - "@types/semver": { + "node_modules/@types/semver": { "version": "5.5.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha1-FGwqKe59O65L8vyydGNuJkyBPEU=" + "integrity": "sha1-FGwqKe59O65L8vyydGNuJkyBPEU=", + "license": "MIT" }, - "@types/uuid": { + "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha1-vYakNhffBZR4fTi3NfVcgFvs8bw=" + "integrity": "sha1-vYakNhffBZR4fTi3NfVcgFvs8bw=", + "license": "MIT" }, - "adm-zip": { + "node_modules/adm-zip": { "version": "0.5.16", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha1-C15Md58H3t6lgFzcyxFHBx2UqQk=" + "integrity": "sha1-C15Md58H3t6lgFzcyxFHBx2UqQk=", + "license": "MIT", + "engines": { + "node": ">=12.0" + } }, - "agent-base": { + "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", - "requires": { + "license": "MIT", + "dependencies": { "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/argparse/-/argparse-1.0.10.tgz", "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "requires": { + "license": "MIT", + "dependencies": { "sprintf-js": "~1.0.2" } }, - "array-union": { + "node_modules/array-union": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { + "license": "MIT", + "dependencies": { "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "array-uniq": { + "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "arrify": { + "node_modules/arrify": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "async-mutex": { + "node_modules/async-mutex": { "version": "0.4.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/async-mutex/-/async-mutex-0.4.1.tgz", "integrity": "sha1-vM9VuW8rr435DteYy1VEofbuTCw=", - "requires": { + "license": "MIT", + "dependencies": { "tslib": "^2.4.0" } }, - "asynckit": { + "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "license": "MIT" }, - "axios": { + "node_modules/axios": { "version": "1.7.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/axios/-/axios-1.7.7.tgz", "integrity": "sha1-L1VClvmJKnKsjY5MW3nBSpHQpH8=", - "requires": { + "license": "MIT", + "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "azure-devops-node-api": { + "node_modules/azure-devops-node-api": { "version": "12.5.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", "integrity": "sha1-OLnv18WsdDVP5Ojb5CaX2wuOhaU=", - "requires": { + "license": "MIT", + "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" } }, - "azure-pipelines-task-lib": { + "node_modules/azure-pipelines-task-lib": { "version": "4.17.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", "integrity": "sha1-/VMnGollIKefO6iDOcwLNiv51bk=", - "requires": { + "license": "MIT", + "dependencies": { "adm-zip": "^0.5.10", "minimatch": "3.0.5", "nodejs-file-downloader": "^4.11.1", @@ -127,11 +186,12 @@ "uuid": "^3.0.1" } }, - "azure-pipelines-tasks-azure-arm-rest": { + "node_modules/azure-pipelines-tasks-azure-arm-rest": { "version": "3.251.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.251.0.tgz", "integrity": "sha1-9989r2zWGXLLREIAQHuYci00+EM=", - "requires": { + "license": "MIT", + "dependencies": { "@types/jsonwebtoken": "^8.5.8", "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", @@ -147,65 +207,83 @@ "q": "1.5.1", "typed-rest-client": "^2.0.1", "xml2js": "0.6.2" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", + "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha1-6Ps/JClZ20TWO+Zl23qOc5U3oyw=", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-devops-node-api": { + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", + "integrity": "sha1-7FOT3p+hRjmd6qtpBOQdoD7c4YA=", + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "2.1.0" }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha1-cCtx+1UgoTKmbeH2dUHZ5iFU2Cs=", + "license": "MIT", "dependencies": { - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=" - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", - "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", - "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=" - }, - "agent-base": { - "version": "5.1.1", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha1-6Ps/JClZ20TWO+Zl23qOc5U3oyw=" - }, - "azure-devops-node-api": { - "version": "14.1.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", - "integrity": "sha1-7FOT3p+hRjmd6qtpBOQdoD7c4YA=", - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "2.1.0" - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha1-cCtx+1UgoTKmbeH2dUHZ5iFU2Cs=", - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "typed-rest-client": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", - "requires": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - } + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/typed-rest-client": { + "version": "2.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", + "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", + "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" } }, - "azure-pipelines-tasks-docker-common": { + "node_modules/azure-pipelines-tasks-docker-common": { "version": "2.247.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.247.0.tgz", "integrity": "sha1-fs3fLL5BF7J8DZZZwXmsWLs2xUs=", - "requires": { + "license": "MIT", + "dependencies": { "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", "@types/q": "1.5.4", @@ -214,67 +292,79 @@ "azure-pipelines-tasks-azure-arm-rest": "^3.242.2", "del": "2.2.0", "q": "1.4.1" - }, - "dependencies": { - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=" - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", - "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", - "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=" - }, - "q": { - "version": "1.4.1", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" - } } }, - "azure-pipelines-tasks-utility-common": { + "node_modules/azure-pipelines-tasks-docker-common/node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-docker-common/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", + "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-docker-common/node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-docker-common/node_modules/q": { + "version": "1.4.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "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 (http://github.com/kriskowal/q/raw/master/LICENSE)", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/azure-pipelines-tasks-utility-common": { "version": "3.246.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.246.0.tgz", "integrity": "sha1-+AfA6GAxHX81X9Y4YhTuuacwa2A=", - "requires": { + "license": "MIT", + "dependencies": { "@types/node": "~16.11.39", "azure-pipelines-task-lib": "^4.11.0", "azure-pipelines-tool-lib": "^2.0.7", "js-yaml": "3.13.1", "semver": "^5.7.2", "typed-rest-client": "2.1.0" - }, + } + }, + "node_modules/azure-pipelines-tasks-utility-common/node_modules/@types/node": { + "version": "16.11.68", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.11.68.tgz", + "integrity": "sha1-MO6SP02UB5PgOA9c5hwL1LcZa2w=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-utility-common/node_modules/typed-rest-client": { + "version": "2.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", + "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", + "license": "MIT", "dependencies": { - "@types/node": { - "version": "16.11.68", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.11.68.tgz", - "integrity": "sha1-MO6SP02UB5PgOA9c5hwL1LcZa2w=" - }, - "typed-rest-client": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", - "requires": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - } + "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" } }, - "azure-pipelines-tool-lib": { + "node_modules/azure-pipelines-tool-lib": { "version": "2.0.8", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.8.tgz", "integrity": "sha1-S9vVPAQsrcivQ6v2sNyspzUNDPk=", - "requires": { + "license": "MIT", + "dependencies": { "@types/semver": "^5.3.0", "@types/uuid": "^3.4.5", "azure-pipelines-task-lib": "^4.1.0", @@ -282,78 +372,106 @@ "semver-compare": "^1.0.0", "typed-rest-client": "^1.8.6", "uuid": "^3.3.2" - }, - "dependencies": { - "@types/uuid": { - "version": "3.4.13", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-3.4.13.tgz", - "integrity": "sha1-/okOUX+4QGIL4oTuIT6B1wKx92s=" - } } }, - "balanced-match": { + "node_modules/azure-pipelines-tool-lib/node_modules/@types/uuid": { + "version": "3.4.13", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-3.4.13.tgz", + "integrity": "sha1-/okOUX+4QGIL4oTuIT6B1wKx92s=", + "license": "MIT" + }, + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=" + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", + "license": "MIT" }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", - "requires": { + "license": "MIT", + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "buffer-equal-constant-time": { + "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "license": "BSD-3-Clause" }, - "call-bind-apply-helpers": { + "node_modules/call-bind-apply-helpers": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", "integrity": "sha1-MuWJLmNhspsLVFum93YzeNrKKEA=", - "requires": { + "license": "MIT", + "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "call-bound": { + "node_modules/call-bound": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/call-bound/-/call-bound-1.0.3.tgz", "integrity": "sha1-Qc/QMrWT45F2pxUzq084SqBP1oE=", - "requires": { + "license": "MIT", + "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "combined-stream": { + "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", - "requires": { + "license": "MIT", + "dependencies": { "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "license": "MIT" }, - "debug": { + "node_modules/debug": { "version": "4.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/debug/-/debug-4.4.0.tgz", "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", - "requires": { + "license": "MIT", + "dependencies": { "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "del": { + "node_modules/del": { "version": "2.2.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/del/-/del-2.2.0.tgz", "integrity": "sha1-mlDwS/NzJeKDtPROmFM2wlJFa9U=", - "requires": { + "license": "MIT", + "dependencies": { "globby": "^4.0.0", "is-path-cwd": "^1.0.0", "is-path-in-cwd": "^1.0.0", @@ -361,93 +479,151 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=0.10.0" } }, - "delayed-stream": { + "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } }, - "des.js": { + "node_modules/des.js": { "version": "1.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/des.js/-/des.js-1.1.0.tgz", "integrity": "sha1-HTf1dm87v/Tuljjocah2jBc7gdo=", - "requires": { + "license": "MIT", + "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "dunder-proto": { + "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha1-165mfh3INIL4tw/Q9u78UNow9Yo=", - "requires": { + "license": "MIT", + "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "ecdsa-sig-formatter": { + "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=", - "requires": { + "license": "Apache-2.0", + "dependencies": { "safe-buffer": "^5.0.1" } }, - "es-define-property": { + "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=" + "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "es-errors": { + "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=" + "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "es-object-atoms": { + "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha1-3bVc1HrC4kBwEmC8Ko4x7LZD2UE=", - "requires": { + "license": "MIT", + "dependencies": { "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "follow-redirects": { + "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha1-pgT6EORDv5jKlCKNnuvMLoosjuE=" + "integrity": "sha1-pgT6EORDv5jKlCKNnuvMLoosjuE=", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "form-data": { + "node_modules/form-data": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/form-data/-/form-data-4.0.0.tgz", "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", - "requires": { + "license": "MIT", + "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "license": "ISC" }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=" + "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.2.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/get-intrinsic/-/get-intrinsic-1.2.6.tgz", "integrity": "sha1-Q9090Oe0m4Ky38rRDcgkv3/CZdU=", - "requires": { + "license": "MIT", + "dependencies": { "call-bind-apply-helpers": "^1.0.1", "dunder-proto": "^1.0.0", "es-define-property": "^1.0.1", @@ -458,13 +634,21 @@ "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "glob": { + "node_modules/glob": { "version": "7.2.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-7.2.3.tgz", "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", - "requires": { + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", @@ -472,22 +656,31 @@ "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://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", + "license": "ISC", "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", - "requires": { - "brace-expansion": "^1.1.7" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "globby": { + "node_modules/globby": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/globby/-/globby-4.1.0.tgz", "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "requires": { + "license": "MIT", + "dependencies": { "array-union": "^1.0.1", "arrify": "^1.0.0", "glob": "^6.0.1", @@ -495,115 +688,175 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "gopd": { + "node_modules/gopd": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=" + "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=" + "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "hasown": { + "node_modules/hasown": { "version": "2.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/hasown/-/hasown-2.0.2.tgz", "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=", - "requires": { + "license": "MIT", + "dependencies": { "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "https-proxy-agent": { + "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha1-xZ7yJKBP6LdU89sAY6Jeow0ABdY=", - "requires": { + "license": "MIT", + "dependencies": { "agent-base": "6", "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { + "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" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "license": "ISC" }, - "interpret": { + "node_modules/interpret": { "version": "1.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=" + "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.16.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-core-module/-/is-core-module-2.16.0.tgz", "integrity": "sha1-bAH/3V4zxJwdKr+pMzSoXLVr2Bw=", - "requires": { + "license": "MIT", + "dependencies": { "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-path-cwd": { + "node_modules/is-path-cwd": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "is-path-in-cwd": { + "node_modules/is-path-in-cwd": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", - "requires": { + "license": "MIT", + "dependencies": { "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-path-inside": { + "node_modules/is-path-inside": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { + "license": "MIT", + "dependencies": { "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "js-md4": { + "node_modules/js-md4": { "version": "0.3.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha1-zTs9wEWwxARVbIHdtXVsI+WdfPU=" + "integrity": "sha1-zTs9wEWwxARVbIHdtXVsI+WdfPU=", + "license": "MIT" }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.13.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", - "requires": { + "license": "MIT", + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsonwebtoken": { + "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", "integrity": "sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=", - "requires": { + "license": "MIT", + "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", @@ -615,440 +868,658 @@ "ms": "^2.1.1", "semver": "^7.5.4" }, - "dependencies": { - "semver": { - "version": "7.6.3", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-7.6.3.tgz", - "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=" - } + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-7.6.3.tgz", + "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "jwa": { + "node_modules/jwa": { "version": "1.4.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jwa/-/jwa-1.4.1.tgz", "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=", - "requires": { + "license": "MIT", + "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, - "jws": { + "node_modules/jws": { "version": "3.2.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jws/-/jws-3.2.2.tgz", "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=", - "requires": { + "license": "MIT", + "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, - "lodash.includes": { + "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "license": "MIT" }, - "lodash.isboolean": { + "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "license": "MIT" }, - "lodash.isinteger": { + "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "license": "MIT" }, - "lodash.isnumber": { + "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "license": "MIT" }, - "lodash.isplainobject": { + "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "license": "MIT" }, - "lodash.isstring": { + "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "license": "MIT" }, - "lodash.once": { + "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "license": "MIT" }, - "math-intrinsics": { + "node_modules/math-intrinsics": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/math-intrinsics/-/math-intrinsics-1.0.0.tgz", - "integrity": "sha1-TgS/h8hapR6Q0HjawiUrTrUmCBc=" + "integrity": "sha1-TgS/h8hapR6Q0HjawiUrTrUmCBc=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=" + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", - "requires": { + "license": "MIT", + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "minimalistic-assert": { + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=" + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "license": "ISC" }, - "minimatch": { + "node_modules/minimatch": { "version": "3.0.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha1-TajxKQ7g8PjoPWDKafjxNAaGBKM=", - "requires": { + "license": "ISC", + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "ms": { + "node_modules/ms": { "version": "2.1.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=" + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "license": "MIT" }, - "msalv1": { - "version": "npm:@azure/msal-node@1.18.4", + "node_modules/msalv1": { + "name": "@azure/msal-node", + "version": "1.18.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-node/-/msal-node-1.18.4.tgz", "integrity": "sha1-ySGwRHyS+zsMsev1qadvytLsfCE=", - "requires": { + "dependencies": { "@azure/msal-common": "13.3.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=" - } } }, - "msalv2": { - "version": "npm:@azure/msal-node@2.16.2", + "node_modules/msalv1/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/msalv2": { + "name": "@azure/msal-node", + "version": "2.16.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-node/-/msal-node-2.16.2.tgz", "integrity": "sha1-Prdo02iD6m+ak5wLW0Z7UY54//w=", - "requires": { + "dependencies": { "@azure/msal-common": "14.16.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" - }, - "dependencies": { - "@azure/msal-common": { - "version": "14.16.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-common/-/msal-common-14.16.0.tgz", - "integrity": "sha1-80cPyux4jb5QhZlSzUmTQL2iPXo=" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=" - } } }, - "node-fetch": { + "node_modules/msalv2/node_modules/@azure/msal-common": { + "version": "14.16.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-common/-/msal-common-14.16.0.tgz", + "integrity": "sha1-80cPyux4jb5QhZlSzUmTQL2iPXo=", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/msalv2/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha1-0PD6bj4twdJ+/NitmdVQvalNGH0=", - "requires": { + "license": "MIT", + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "nodejs-file-downloader": { + "node_modules/nodejs-file-downloader": { "version": "4.13.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", "integrity": "sha1-2ofDAIHeX/TouGQGLJjN7APmatA=", - "requires": { + "license": "ISC", + "dependencies": { "follow-redirects": "^1.15.6", "https-proxy-agent": "^5.0.0", "mime-types": "^2.1.27", "sanitize-filename": "^1.6.3" } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { + "node_modules/object-inspect": { "version": "1.13.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha1-8UwYPeURMCQ9bRiuFJN1/1DqSIo=" + "integrity": "sha1-8UwYPeURMCQ9bRiuFJN1/1DqSIo=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { + "license": "ISC", + "dependencies": { "wrappy": "1" } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "path-is-inside": { + "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "license": "(WTFPL OR MIT)" }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=" + "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=", + "license": "MIT" }, - "performance-now": { + "node_modules/performance-now": { "version": "0.2.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "license": "MIT" }, - "pify": { + "node_modules/pify": { "version": "2.3.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "pinkie": { + "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "pinkie-promise": { + "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { + "license": "MIT", + "dependencies": { "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "proxy-from-env": { + "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=" + "integrity": "sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=", + "license": "MIT" }, - "q": { + "node_modules/q": { "version": "1.5.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "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" + } }, - "qs": { + "node_modules/qs": { "version": "6.13.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/qs/-/qs-6.13.1.tgz", "integrity": "sha1-POX8cr06gXG4XJm5PGXdILfRsW4=", - "requires": { + "license": "BSD-3-Clause", + "dependencies": { "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "rechoir": { + "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { + "dependencies": { "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "resolve": { + "node_modules/resolve": { "version": "1.22.9", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/resolve/-/resolve-1.22.9.tgz", "integrity": "sha1-baduTNxXGB+kRxIxQA6IUdCpJPM=", - "requires": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "rimraf": { + "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", - "requires": { + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "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" }, - "sanitize-filename": { + "node_modules/sanitize-filename": { "version": "1.6.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sanitize-filename/-/sanitize-filename-1.6.3.tgz", "integrity": "sha1-dV69dSBFkxl34wsgJdNA18kJA3g=", - "requires": { + "license": "WTFPL OR ISC", + "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, - "sax": { + "node_modules/sax": { "version": "1.4.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sax/-/sax-1.4.1.tgz", - "integrity": "sha1-RMyJiDd/EmME07P8EBDHM7kp7w8=" + "integrity": "sha1-RMyJiDd/EmME07P8EBDHM7kp7w8=", + "license": "ISC" }, - "semver": { + "node_modules/semver": { "version": "5.7.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-5.7.2.tgz", - "integrity": "sha1-SNVdtzfDKHzUg14X+hP+rOHEHvg=" + "integrity": "sha1-SNVdtzfDKHzUg14X+hP+rOHEHvg=", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "semver-compare": { + "node_modules/semver-compare": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "license": "MIT" }, - "shelljs": { + "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha1-3gVUCNg2G+1mxmnS8ABTjO2O4gw=", - "requires": { + "license": "BSD-3-Clause", + "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha1-w/z/nE2pMnhIczNeyXZfqU/2a8k=", - "requires": { + "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" } }, - "side-channel-list": { + "node_modules/side-channel-list": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha1-EMtZhCYxFdO3oOM2WR4pCoMK+K0=", - "requires": { + "license": "MIT", + "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "side-channel-map": { + "node_modules/side-channel-map": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=", - "requires": { + "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" } }, - "side-channel-weakmap": { + "node_modules/side-channel-weakmap": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=", - "requires": { + "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" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "license": "BSD-3-Clause" }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha1-btpL00SjyUrqN21MwxvHcxEDngk=" + "integrity": "sha1-btpL00SjyUrqN21MwxvHcxEDngk=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "license": "MIT" }, - "truncate-utf8-bytes": { + "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", - "requires": { + "license": "WTFPL", + "dependencies": { "utf8-byte-length": "^1.0.1" } }, - "tslib": { + "node_modules/tslib": { "version": "2.8.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=" + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", + "license": "0BSD" }, - "tunnel": { + "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=" + "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } }, - "typed-rest-client": { + "node_modules/typed-rest-client": { "version": "1.8.11", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-1.8.11.tgz", "integrity": "sha1-aQbwLjyR6NhRV58lWr8P1ggAoE0=", - "requires": { + "license": "MIT", + "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", "underscore": "^1.12.1" } }, - "typescript": { + "node_modules/typescript": { "version": "4.9.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typescript/-/typescript-4.9.5.tgz", "integrity": "sha1-CVl5+bzA0J2jJNWNA86Pg3TL5lo=", - "dev": true + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "underscore": { + "node_modules/underscore": { "version": "1.13.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha1-lw4zljr5p92iKPF+voOZ5fvmOhA=" + "integrity": "sha1-lw4zljr5p92iKPF+voOZ5fvmOhA=", + "license": "MIT" }, - "utf8-byte-length": { + "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha1-+fY5ENFVNu4rLV3UZlOJcV6sXB4=" + "integrity": "sha1-+fY5ENFVNu4rLV3UZlOJcV6sXB4=", + "license": "(WTFPL OR MIT)" }, - "uuid": { + "node_modules/uuid": { "version": "3.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=" + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", + "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" + } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "license": "BSD-2-Clause" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { + "license": "MIT", + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "license": "ISC" }, - "xml2js": { + "node_modules/xml2js": { "version": "0.6.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/xml2js/-/xml2js-0.6.2.tgz", "integrity": "sha1-3QtjAIOqCcFh4lpNCQHisqkptJk=", - "requires": { + "license": "MIT", + "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "xmlbuilder": { + "node_modules/xmlbuilder": { "version": "11.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=" + "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=", + "license": "MIT", + "engines": { + "node": ">=4.0" + } } } -} \ No newline at end of file +} diff --git a/Tasks/AzureTestPlanV0/runTestPlan.ts b/Tasks/AzureTestPlanV0/runTestPlan.ts index 1f4e89b5876a..d6aa570e120a 100644 --- a/Tasks/AzureTestPlanV0/runTestPlan.ts +++ b/Tasks/AzureTestPlanV0/runTestPlan.ts @@ -1,48 +1,72 @@ import * as tl from 'azure-pipelines-task-lib/task'; -import { manualTestsFlow } from './manualTests' +import { manualTestsFlow } from './Manual Flow/manualTests' import { getTestPlanData, TestPlanData } from './testPlanData' -import { automatedTestsFlow } from './automatedTests' -import { publishEvent, ciDictionary } from './ciEventLogger'; +import { automatedTestsFlow } from './OldAutomatedFlow/automatedTests' +import { publishEvent, ciDictionary } from './Common/ciEventLogger'; +import { IOperationResult } from './Interface/IOperationResult'; +import { newAutomatedTestsFlow } from './Automated Flow/automatedFlow'; + +function setupCiData(testSelectorInput: string, testPlanInfo: TestPlanData) { + let ciData: ciDictionary = { + TestSelector: testSelectorInput, + totalNumOfManualTestPoint: testPlanInfo.listOfManualTestPoints.length, + totalNumOfAutomatedTestPoint: testPlanInfo.listOfAutomatedTestPoints.length, + totalNumOfTestSuites: testPlanInfo.testSuiteIds.length + } + + return ciData; +} export async function run() { const testSelectorInput = tl.getInput('testSelector'); console.log('Test Selector selected : ' + testSelectorInput); - var ciData: ciDictionary = { - TestSelector: testSelectorInput, - totalNumOfManualTestPoint: 0, - totalNumOfAutomatedTestPoint: 0, - totalNumOfTestSuites: 0 + let testPlanInfo: TestPlanData; + try { + testPlanInfo = await getTestPlanData(); + } catch (err) { + tl.setResult(tl.TaskResult.Failed, `Error in fetching test plan data: ${err}`); + return 1; } - const testPlanInfo = await getTestPlanData(); + let ciData: ciDictionary = setupCiData(testSelectorInput, testPlanInfo); - ciData.totalNumOfAutomatedTestPoint = testPlanInfo.listOfAutomatedTestPoints.length; - ciData.totalNumOfManualTestPoint = testPlanInfo.listOfManualTestPoints.length; - ciData.totalNumOfTestSuites = testPlanInfo.testSuiteIds.length; - - let manualTestFlowReturnCode = 0; - let automatedTestFlowReturnCode = 0; + let manualFlowResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let automatedFlowResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const myEnvVar = tl.getVariable('Use_NewAutomatedFlow'); + tl.debug(`The value of Use_NewAutomatedFlow is: ${myEnvVar}`); // trigger manual, automated or both tests based on user's input if (testSelectorInput.includes('manualTests')) { - manualTestFlowReturnCode = await manualTestsFlow(testPlanInfo, ciData); - tl.debug(`Execution Status Code for Manual Test Flow is ${manualTestFlowReturnCode}`); - ciData["manualTestFlowReturnCode"] = manualTestFlowReturnCode; + manualFlowResult = await manualTestsFlow(testPlanInfo, ciData); + tl.debug(`Execution Status Code for Manual Test Flow is ${manualFlowResult.returnCode}`); + + if(manualFlowResult.returnCode){ + tl.debug(`Error in Manual Test Flow: ${manualFlowResult.errorMessage}`); + } + ciData["manualTestFlowReturnCode"] = manualFlowResult.returnCode; } if (testSelectorInput.includes('automatedTests')) { - automatedTestFlowReturnCode = await automatedTestsFlow(testPlanInfo, testSelectorInput, ciData); - tl.debug(`Execution Status Code for Automated Test Flow is ${automatedTestFlowReturnCode}`); - ciData["automatedTestFlowReturnCode"] = automatedTestFlowReturnCode; + if(myEnvVar){ + automatedFlowResult = await newAutomatedTestsFlow(testPlanInfo, testSelectorInput, ciData); + tl.debug(`Execution Status Code for Automated Test Flow is ${automatedFlowResult.returnCode}`); + ciData["automatedTestFlowReturnCode"] = automatedFlowResult.returnCode; + } + else{ + automatedFlowResult = await automatedTestsFlow(testPlanInfo, testSelectorInput, ciData); + tl.debug(`Execution Status Code for Automated Test Flow is ${automatedFlowResult.returnCode}`); + ciData["automatedTestFlowReturnCode"] = automatedFlowResult.returnCode; + + } } - if( manualTestFlowReturnCode || automatedTestFlowReturnCode){ + if( manualFlowResult.returnCode || automatedFlowResult.returnCode){ tl.setResult(tl.TaskResult.Failed, "Faced error in execution."); } publishEvent(ciData); } -run(); +run(); \ No newline at end of file diff --git a/Tasks/AzureTestPlanV0/task.json b/Tasks/AzureTestPlanV0/task.json index 2e63f079012f..e229e2a7736c 100644 --- a/Tasks/AzureTestPlanV0/task.json +++ b/Tasks/AzureTestPlanV0/task.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 250, - "Patch": 10 + "Minor": 252, + "Patch": 8 }, "preview": true, "demands": [], @@ -163,6 +163,10 @@ "Node16": { "target": "runTestPlan.js", "argumentFormat": "" + }, + "Node20_1": { + "target": "runTestPlan.js", + "argumentFormat": "" } }, "messages": { diff --git a/Tasks/AzureTestPlanV0/task.loc.json b/Tasks/AzureTestPlanV0/task.loc.json index a6813fdd66c5..d09f6999dd05 100644 --- a/Tasks/AzureTestPlanV0/task.loc.json +++ b/Tasks/AzureTestPlanV0/task.loc.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 250, - "Patch": 10 + "Minor": 252, + "Patch": 8 }, "preview": true, "demands": [], diff --git a/Tasks/AzureTestPlanV0/testPlanData.ts b/Tasks/AzureTestPlanV0/testPlanData.ts index e16b68ccf635..345b7624c209 100644 --- a/Tasks/AzureTestPlanV0/testPlanData.ts +++ b/Tasks/AzureTestPlanV0/testPlanData.ts @@ -1,15 +1,12 @@ -import { Console } from "console"; -import tl = require('azure-pipelines-task-lib/task'); +import tl = require('azure-pipelines-task-lib/task'); import apim = require('azure-devops-node-api'); -import { WorkItemDetails, TestCase } from 'azure-devops-node-api/interfaces/TestPlanInterfaces'; +import { TestCase } from 'azure-devops-node-api/interfaces/TestPlanInterfaces'; import { PagedList } from 'azure-devops-node-api/interfaces/common/VSSInterfaces'; -import TestPlanInterfaces = require('azure-devops-node-api/interfaces/TestPlanInterfaces'); -import { RunCreateModel, TestRun, ShallowReference, TestPlan, TestCaseResult, TestResultCreateModel, TestCaseMetadata2, TestCaseReference2 } from 'azure-devops-node-api/interfaces/TestInterfaces'; -import VSSInterfaces = require('azure-devops-node-api/interfaces/common/VSSInterfaces'); -import constants = require('./constants'); -import { ITestResultsApi } from "azure-devops-node-api/TestResultsApi"; +import {TestCaseResult} from 'azure-devops-node-api/interfaces/TestInterfaces'; +import constants = require('./Common/constants'); +import { getVstsWepApi } from './Common/ApiHelper'; -const personalAccessTokenRegexp = /^.{76}AZDO.{4}$/; +export const personalAccessTokenRegexp = /^.{76}AZDO.{4}$/; export interface TestPlanData { listOfFQNOfTestCases: string[]; @@ -185,12 +182,9 @@ export async function getTestPlanDataPoints(testPlanInputId: number, testSuitesI export async function getTestCaseListAsync(testPlanId: number, testSuiteId: number, testConfigurationId: string, continuationToken: string): Promise> { - let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); - let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); - let projectId = tl.getVariable('System.TeamProjectId'); - let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); - let vsts: apim.WebApi = new apim.WebApi(url, auth); + let vsts: apim.WebApi = await getVstsWepApi(); let testPlanApi = await vsts.getTestPlanApi(); + let projectId = tl.getVariable('System.TeamProjectId'); tl.debug("Fetching test case list for test plan:" + testPlanId + " ,test suite id:" + testSuiteId + " ,test configuration id:" + testConfigurationId); @@ -202,89 +196,6 @@ export async function getTestCaseListAsync(testPlanId: number, testSuiteId: numb testConfigurationId, null, continuationToken) - -} - -export async function createManualTestRun(testPlanInfo: TestPlanData): Promise { - - const manualTestRunResponse: ManualTestRunData = { testRunId: 0, runUrl: "" }; - - const testRunRequestBody = prepareRunModel(testPlanInfo); - - try { - - let projectId = tl.getVariable('System.TeamProjectId'); - var testResultsApi = await getTestResultApiClient(); - - let testRunResponse = await createManualTestRunAsync(testResultsApi, testRunRequestBody, projectId); - console.log("Test run created with id: ", testRunResponse.id); - - let testResultsResponse = await createManualTestResultsAsync(testResultsApi, testPlanInfo.listOfManualTestPoints, projectId, testRunResponse.id); - console.log("Test results created for run id: ", testResultsResponse[0].testRun); - - manualTestRunResponse.testRunId = testRunResponse.id; - manualTestRunResponse.runUrl = testRunResponse.webAccessUrl; - } - - catch(error) { - tl.error("Error while creating manual test run :" + error); - tl.setResult(tl.TaskResult.Failed, tl.loc('ErrorFailTaskOnCreateRunFailure')); - } - - return manualTestRunResponse; } -export function prepareRunModel(testPlanInfo: TestPlanData): RunCreateModel{ - - // some create run params may change on based of requirement - let buildId = tl.getVariable('Build.BuildId'); - let testPointIds: number[] = testPlanInfo.listOfManualTestPoints.map(testPoint => parseInt(testPoint.testPoint.id)); - let testPlanId = testPlanInfo.testPlanId; - let testConfigurationId = testPlanInfo.testConfigurationId; - - const currentUtcTime = new Date().toUTCString(); - console.log("date:...", currentUtcTime); - - const testRunRequestBody: RunCreateModel = { - automated: false, - name: 'Manual test run', - plan: { id: testPlanId.toString() }, - configurationIds: [testConfigurationId], - pointIds: testPointIds, - build: { id: buildId }, - iteration: "manual" - }; - - return testRunRequestBody; -} - -export async function createManualTestResultsAsync(testResultsApi:ITestResultsApi, testResultsRequest: TestCaseResult[], projectId, testRunId): Promise { - return testResultsApi.addTestResultsToTestRun( - testResultsRequest, - projectId, - testRunId) - -} - -export async function createManualTestRunAsync(testResultsApi:ITestResultsApi, testRunRequest: RunCreateModel, projectId): Promise { - - tl.debug("Creating manual test run"); - - return testResultsApi.createTestRun( - testRunRequest, - projectId) - -} - -export async function getTestResultApiClient(){ - let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); - let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); - - let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); - let vsts: apim.WebApi = new apim.WebApi(url, auth); - let testResultsApi = await vsts.getTestResultsApi(); - - console.log("Test result api client created"); - return testResultsApi; -} diff --git a/Tasks/AzureTestPlanV0/utils.ts b/Tasks/AzureTestPlanV0/utils.ts deleted file mode 100644 index 64a56007222b..000000000000 --- a/Tasks/AzureTestPlanV0/utils.ts +++ /dev/null @@ -1,56 +0,0 @@ -export function removeParenthesesFromEnd(inputString) { - // Check if the string ends with parentheses - if (inputString.endsWith("()")) { - // Remove the parentheses from the end - return inputString.slice(0, -2); - } else { - // If no parentheses at the end, return the original string - return inputString; - } -} - -export function replaceLastDotWithHash(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWithHash = inputString.slice(0, lastDotIndex) + '#' + inputString.slice(lastDotIndex + 1); - return stringWithHash; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} - -export function separateGoPath(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWith = inputString.slice(0, lastDotIndex); - return stringWith; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} -export function separateGoTestName(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWith = inputString.slice(lastDotIndex + 1); - return stringWith; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} - -export function separateJestTestName(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const testName = inputString.slice(lastDotIndex + 1); - return testName; - } else { - return inputString; - } -} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0.versionmap.txt b/_generated/AzureTestPlanV0.versionmap.txt index cfbc3be2a2f0..9ddbbe08096e 100644 --- a/_generated/AzureTestPlanV0.versionmap.txt +++ b/_generated/AzureTestPlanV0.versionmap.txt @@ -1,2 +1,2 @@ -Default|0.250.10 -Node20-225|0.250.11 +Default|0.252.8 +Node20-225|0.252.9 diff --git a/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/GradleTestExecutor.ts b/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/GradleTestExecutor.ts new file mode 100644 index 000000000000..14aead6ef654 --- /dev/null +++ b/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/GradleTestExecutor.ts @@ -0,0 +1,133 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { removeParenthesesFromEnd, replaceLastDotWithHash } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class GradleTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.GRADLE_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + gradlewFilePath: string; + + /* + * Setup the test executor + */ + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + this.gradlewFilePath = tl.getInput('gradleFilePath'); + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('-v'); + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error in Gradle setup: " + operationResult.errorMessage); + tl.debug("Looking for Gradlew file to install Gradle"); + } + + if(operationResult.returnCode === 1){ + operationResult.returnCode = 0; + operationResult.errorMessage = ''; + + try { + this.toolRunnerPath = tl.which(this.gradlewFilePath, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error while looking for user input Gradlew file: " + operationResult.errorMessage); + tl.debug("Looking for gradlew file in the repository"); + } + } + + if(operationResult.returnCode === 1){ + operationResult.returnCode = 0; + operationResult.errorMessage = ''; + + try { + const gradlewExecFileSearchPattern: string = "**/gradlew"; + let workingDirectory = tl.getVariable('System.DefaultWorkingDirectory'); + let os = tl.getVariable('Agent.OS'); + const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern); + this.toolRunnerPath = gradlewPath[0]; + + if (gradlewPath.length == 0) { + operationResult.returnCode = 1; + operationResult.errorMessage = tl.loc('GradlewNotFound'); + tl.debug("Gradlew file not found in the repository"); + return operationResult; + } + + if (gradlewPath.length > 1) { + tl.warning(tl.loc('MultipleMatchingGradlewFound')); + tl.debug(this.toolRunnerPath); + } + + if (os == 'Windows_NT') { + tl.debug('Append .bat extension name to gradlew script for windows agent'); + this.toolRunnerPath += '.bat'; + } + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error while looking for gradlew file in the repository: " + operationResult.errorMessage); + } + + return operationResult; + } + + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + listOfTestsToBeExecuted.forEach(element => { + listOfTestsToBeRan.push(element); + }); + + return operationResult; + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + const args = [] + + args.push('test'); + + for (let testcase of testsToBeExecuted) { + // in some cases found that gradle is including () in test name + testcase = removeParenthesesFromEnd(testcase); + args.push('--tests'); + args.push(testcase); + } + + tl.debug("Executing gradle tests with args :" + args); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/MavenTestExecutor.ts b/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/MavenTestExecutor.ts new file mode 100644 index 000000000000..5ce3cf485421 --- /dev/null +++ b/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/MavenTestExecutor.ts @@ -0,0 +1,93 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { replaceLastDotWithHash } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class MavenTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.MVN_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + pomFilePath: string; + + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + this.pomFilePath = tl.getInput('pomFilePath'); + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + return operationResult; + } + + + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('-version'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + listOfTestsToBeExecuted.forEach(element => { + listOfTestsToBeRan.push(element); + }); + + return operationResult; + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + const args = [] + const testsToRun =[] + + for (let tests of testsToBeExecuted) { + const modifiedTest = replaceLastDotWithHash(tests); + testsToRun.push(modifiedTest); + } + + if (testsToRun.length > 0) + { + const testsList = testsToRun.join(',') + const dtest = constants.MAVEN_DTEST; + const combinedTestArgs = dtest + testsList; + + args.push('test'); + args.push(combinedTestArgs); + } + + args.push('-ntp'); + + if (this.pomFilePath) { + args.push('-f'); + args.push(this.pomFilePath); + } + + tl.debug("Executing java maven tests with args :" + args); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/PythonTestExecutor.ts b/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/PythonTestExecutor.ts new file mode 100644 index 000000000000..a5f930459220 --- /dev/null +++ b/_generated/AzureTestPlanV0/Automated Flow/TestExecutors/PythonTestExecutor.ts @@ -0,0 +1,103 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { replaceLastDotWithHash, extractPythonDiscoveredTests, getExecOptions, transformPythonTestStrings } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class PythonTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.PYTEST_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + pomFilePath: string; + + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + return operationResult; + } + + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('--version'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(testsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const args: string[] = ['--collect-only', '-q']; + let discoveryResult = { stdout: ''};; + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(getExecOptions(discoveryResult)); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + + if(operationResult.returnCode === 0){ + // Extract discovered tests from stdout + const discoveredTests: string[] = extractPythonDiscoveredTests(discoveryResult.stdout ?? ''); + var testStringtoFQNMap: Map = new Map(); + + for(let test of discoveredTests){ + testStringtoFQNMap.set(transformPythonTestStrings(test), test); + } + + for(let test of testsToBeExecuted){ + if(!testStringtoFQNMap.has(test)){ + tl.debug(`Test ${test} not found in discovered tests`); + } + else{ + listOfTestsToBeRan.push(testStringtoFQNMap.get(test)); + } + } + + // Variables for debug console logs + const testsToBeExecutedString: string = testsToBeExecuted.join(", "); + const testsToRunString: string = listOfTestsToBeRan.join(", "); + + tl.debug(`Tests to executed are: ${testsToBeExecutedString}`); + tl.debug(`Tests to run are: ${testsToRunString}`); + console.log(`Found ${listOfTestsToBeRan.length} tests to run`); + + return operationResult; + } + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + + tl.debug("Executing python pytest tests with args :" + testsToBeExecuted); + this.toolRunner.arg(testsToBeExecuted); + this.toolRunner.arg('--junitxml=TEST-python-junit.xml'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } + + +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/Automated Flow/automatedFlow.ts b/_generated/AzureTestPlanV0/Automated Flow/automatedFlow.ts new file mode 100644 index 000000000000..7a9c50eb1ed1 --- /dev/null +++ b/_generated/AzureTestPlanV0/Automated Flow/automatedFlow.ts @@ -0,0 +1,95 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { IOperationResult } from '../Interface/IOperationResult'; +import { ciDictionary } from '../Common/ciEventLogger'; +import { publishAutomatedTestResult } from '../Common/publishAutomatedTests'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import { TestPlanData } from '../testPlanData'; +import * as constant from '../Common/constants'; +import { ITestExecutor } from '../Interface/ITestExecutor'; +import { MavenTestExecutor } from '../Automated Flow/TestExecutors/MavenTestExecutor'; +import { GradleTestExecutor } from './TestExecutors/GradleTestExecutor'; +import { PythonTestExecutor } from './TestExecutors/PythonTestExecutor'; + +export async function newAutomatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { + let listOfTestsFromTestPlan: string[] = testPlanInfo?.listOfFQNOfTestCases ?? []; + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const testLanguage = tl.getInput('testLanguageInput', true); + let testExecutor: ITestExecutor = getTestExecutor(testLanguage); + let listOfTestsDiscovered: string[] = []; + if (listOfTestsFromTestPlan.length > 0) { + automatedTestInvokerResult = await testExecutor.setup(); + + if (automatedTestInvokerResult.returnCode === 0) { + automatedTestInvokerResult = await testExecutor.discoverTests(listOfTestsFromTestPlan, ciData, listOfTestsDiscovered); + + if (automatedTestInvokerResult.returnCode === 0) { + if (listOfTestsDiscovered.length === 0) { + return handleNoTestsFound(testSelectorInput); + } + + automatedTestInvokerResult = await testExecutor.executeTests(listOfTestsDiscovered, ciData); + if (automatedTestInvokerResult.returnCode === 0) { + automatedTestInvokerResult = await publishResults(testPlanInfo, ciData, automatedTestInvokerResult); + } + } + } + } else { + automatedTestInvokerResult = handleNoTestsFound(testSelectorInput); + } + + return automatedTestInvokerResult; +} + +function getTestExecutor(testLanguage: string): ITestExecutor{ + let testExecutor:ITestExecutor; + switch (testLanguage) { + case 'JavaMaven': + testExecutor = new MavenTestExecutor(); + break; + + case 'JavaGradle': + testExecutor = new GradleTestExecutor(); + break; + + case 'Python': + testExecutor = new PythonTestExecutor(); + break; + + case 'Go': + break; + + case 'Jest': + break; + + default: + console.log('Invalid test Language Input selected.'); + } + return testExecutor; +} + +async function publishResults(testPlanInfo: TestPlanData, ciData: ciDictionary, automatedTestInvokerResult: IOperationResult): Promise { + let publishingTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); + publishingTimer.start(); + + try { + await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + publishingTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +function handleNoTestsFound(testSelectorInput: string): IOperationResult { + if (testSelectorInput === 'automatedTests') { + return { returnCode: 1, errorMessage: tl.loc('ErrorFailTaskOnNoAutomatedTestsFound') }; + } else { + console.log('No automated tests found for given test plan inputs '); + return { returnCode: 0, errorMessage: '' }; + } +} + diff --git a/_generated/AzureTestPlanV0/Common/ApiHelper.ts b/_generated/AzureTestPlanV0/Common/ApiHelper.ts new file mode 100644 index 000000000000..6732360f4ddd --- /dev/null +++ b/_generated/AzureTestPlanV0/Common/ApiHelper.ts @@ -0,0 +1,48 @@ +import * as tl from 'azure-pipelines-task-lib'; +import { TestPlanData, personalAccessTokenRegexp } from '../testPlanData'; +import { RunCreateModel } from 'azure-devops-node-api/interfaces/TestInterfaces'; +import * as apim from 'azure-devops-node-api'; + + +export async function getVstsWepApi(): Promise { + let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); + let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); + + let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); + let vsts: apim.WebApi = new apim.WebApi(url, auth); + return vsts; +} + +export function prepareRunModel(testPlanInfo: TestPlanData): RunCreateModel { + + // some create run params may change on based of requirement + let buildId = tl.getVariable('Build.BuildId'); + let testPointIds: number[] = testPlanInfo.listOfManualTestPoints.map(testPoint => parseInt(testPoint.testPoint.id)); + let testPlanId = testPlanInfo.testPlanId; + let testConfigurationId = testPlanInfo.testConfigurationId; + + const currentUtcTime = new Date().toUTCString(); + console.log("date:...", currentUtcTime); + + const testRunRequestBody: RunCreateModel = { + automated: false, + name: 'Manual test run', + plan: { id: testPlanId.toString() }, + configurationIds: [testConfigurationId], + pointIds: testPointIds, + build: { id: buildId }, + iteration: "manual" + }; + + return testRunRequestBody; +} + +export async function getTestResultApiClient() { + + let vsts = await getVstsWepApi(); + let testResultsApi = await vsts.getTestResultsApi(); + + console.log("Test result api client created"); + return testResultsApi; +} + diff --git a/_generated/AzureTestPlanV0/SimpleTimer.ts b/_generated/AzureTestPlanV0/Common/SimpleTimer.ts similarity index 100% rename from _generated/AzureTestPlanV0/SimpleTimer.ts rename to _generated/AzureTestPlanV0/Common/SimpleTimer.ts diff --git a/_generated/AzureTestPlanV0/ciEventLogger.ts b/_generated/AzureTestPlanV0/Common/ciEventLogger.ts similarity index 100% rename from _generated/AzureTestPlanV0/ciEventLogger.ts rename to _generated/AzureTestPlanV0/Common/ciEventLogger.ts diff --git a/_generated/AzureTestPlanV0/constants.ts b/_generated/AzureTestPlanV0/Common/constants.ts similarity index 100% rename from _generated/AzureTestPlanV0/constants.ts rename to _generated/AzureTestPlanV0/Common/constants.ts diff --git a/_generated/AzureTestPlanV0/publishAutomatedTests.ts b/_generated/AzureTestPlanV0/Common/publishAutomatedTests.ts similarity index 100% rename from _generated/AzureTestPlanV0/publishAutomatedTests.ts rename to _generated/AzureTestPlanV0/Common/publishAutomatedTests.ts diff --git a/_generated/AzureTestPlanV0/Common/utils.ts b/_generated/AzureTestPlanV0/Common/utils.ts new file mode 100644 index 000000000000..429e0afd7eac --- /dev/null +++ b/_generated/AzureTestPlanV0/Common/utils.ts @@ -0,0 +1,119 @@ +import * as tl from 'azure-pipelines-task-lib/task'; +import * as tr from 'azure-pipelines-task-lib/toolrunner'; +import { Writable } from 'stream'; + +export function removeParenthesesFromEnd(inputString) { + // Check if the string ends with parentheses + if (inputString.endsWith("()")) { + // Remove the parentheses from the end + return inputString.slice(0, -2); + } else { + // If no parentheses at the end, return the original string + return inputString; + } +} + +export function replaceLastDotWithHash(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWithHash = inputString.slice(0, lastDotIndex) + '#' + inputString.slice(lastDotIndex + 1); + return stringWithHash; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} + +export function extractPythonDiscoveredTests(output: string): string[] { + var testNames: string[] = []; + var lines: string[] = output.split('\n'); + + for (let i = 0; i < lines.length; i++) { + const line = lines[i].trim(); + if(line && line.includes(".py")){ + testNames.push(line); + } + } + tl.debug("Discovered tests : " + testNames); + return testNames; +} + +export function separateGoPath(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWith = inputString.slice(0, lastDotIndex); + return stringWith; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} +export function separateGoTestName(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWith = inputString.slice(lastDotIndex + 1); + return stringWith; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} + +export function separateJestTestName(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const testName = inputString.slice(lastDotIndex + 1); + return testName; + } else { + return inputString; + } +} + +export function getExecOptions(output?: { stdout: string }): tr.IExecOptions { + const env = process.env; + + const execOptions: tr.IExecOptions = { + env: env, + outStream: output ? new Writable({ + write(chunk, encoding, callback) { + try { + output.stdout += chunk.toString(); + process.stdout.write(chunk); + callback(); + } catch (error) { + callback(error); + } + }, + }) : process.stdout, + }; + + return execOptions; +} + +export function transformPythonTestStrings(automatedTestName: string): string { + // Remove any leading or trailing whitespace + automatedTestName = automatedTestName.trim(); + let updatedAutomatedTestName: string = automatedTestName; + + const index = automatedTestName.indexOf("::"); + if(index !== -1) { + let testFilePath = automatedTestName.substring(0, index); + let testMethod = automatedTestName.substring(index + 2); + + //Check if testfilePath is a python file + if(testFilePath.endsWith(".py")) { + testFilePath = testFilePath.slice(0, -3).replace(/\//g, '.'); + + //Do the same replace with :: to . in testMethod + testMethod = testMethod.replace(/::/g, '.'); + + //Finally generate updatedAutomatedTestName + updatedAutomatedTestName = testFilePath + "." + testMethod; + } + } + return updatedAutomatedTestName; +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/Interface/IOperationResult.ts b/_generated/AzureTestPlanV0/Interface/IOperationResult.ts new file mode 100644 index 000000000000..49e7209432ef --- /dev/null +++ b/_generated/AzureTestPlanV0/Interface/IOperationResult.ts @@ -0,0 +1,4 @@ +export interface IOperationResult { + returnCode : number; + errorMessage?: string; +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/Interface/ITestExecutor.ts b/_generated/AzureTestPlanV0/Interface/ITestExecutor.ts new file mode 100644 index 000000000000..8a80d78a8637 --- /dev/null +++ b/_generated/AzureTestPlanV0/Interface/ITestExecutor.ts @@ -0,0 +1,11 @@ +import { ciDictionary } from "../Common/ciEventLogger"; +import { IOperationResult } from "./IOperationResult"; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; + +export interface ITestExecutor { + testRunnerCLI: string; + toolRunner: ToolRunner; + setup(): Promise; + discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise; + executeTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary): Promise; +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/Manual Flow/manualTests.ts b/_generated/AzureTestPlanV0/Manual Flow/manualTests.ts new file mode 100644 index 000000000000..ecc719dcc317 --- /dev/null +++ b/_generated/AzureTestPlanV0/Manual Flow/manualTests.ts @@ -0,0 +1,47 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { TestPlanData, ManualTestRunData } from '../testPlanData'; +import { getTestResultApiClient, prepareRunModel } from '../Common/ApiHelper'; +import { ciDictionary } from '../Common/ciEventLogger'; +import * as constant from '../Common/constants'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import { IOperationResult } from '../Interface/IOperationResult'; +import { TestCaseResult, TestRun } from 'azure-devops-node-api/interfaces/TestInterfaces'; + +export async function manualTestsFlow(testPlanInfo: TestPlanData, ciData: ciDictionary):Promise { + + let simpleTimer = new SimpleTimer(constant.MANUALTESTS_PUBLISHING); + let manualFlowResult: IOperationResult = { returnCode: 0, errorMessage: "" }; + let projectId = tl.getVariable('System.TeamProjectId'); + + simpleTimer.start(); + + try { + const testRunRequestBody = prepareRunModel(testPlanInfo); + const testResultsApi = await getTestResultApiClient(); + + tl.debug(`Creating test run for project Id: ${projectId}`); + const testRunResponse:TestRun = await testResultsApi.createTestRun( + testRunRequestBody, + projectId) + + tl.debug(`Adding ${testPlanInfo.listOfManualTestPoints.length} manual test results to test run id: ${testRunResponse.id}`); + + const testResultsResponse:TestCaseResult[]= await testResultsApi.addTestResultsToTestRun( + testPlanInfo.listOfManualTestPoints, + projectId, + testRunResponse.id); + + console.log("Test run created with id: ", testRunResponse.id); + console.log("Test results created for run id: ", testResultsResponse[0].testRun.id); + console.log('Test run url: ', testRunResponse.url); + } + catch (error) { + manualFlowResult.errorMessage = error.message || String(error); + manualFlowResult.returnCode = 1; + } + finally{ + simpleTimer.stop(ciData); + } + + return manualFlowResult; +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/Invokers/goinvoker.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/goinvoker.ts similarity index 93% rename from _generated/AzureTestPlanV0/Invokers/goinvoker.ts rename to _generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/goinvoker.ts index dea1397075cb..7087d156c5d3 100644 --- a/_generated/AzureTestPlanV0/Invokers/goinvoker.ts +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/goinvoker.ts @@ -1,6 +1,6 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); import tr = require("azure-pipelines-task-lib/toolrunner"); import { executeGoCommand } from '../testLibExecutor'; diff --git a/Tasks/AzureTestPlanV0/Invokers/gradleinvoker.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/gradleinvoker.ts similarity index 85% rename from Tasks/AzureTestPlanV0/Invokers/gradleinvoker.ts rename to _generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/gradleinvoker.ts index 57ec6614b42a..314b5f3df349 100644 --- a/Tasks/AzureTestPlanV0/Invokers/gradleinvoker.ts +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/gradleinvoker.ts @@ -1,7 +1,7 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); -import { execGradleBuild } from '../testLibExecutor'; +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); +import { execGradleBuild } from '../../OldAutomatedFlow/testLibExecutor'; export async function executeGradleTests(testsToBeExecuted: string[], gradleFilePath?: string): Promise { diff --git a/Tasks/AzureTestPlanV0/Invokers/jestinvoker.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/jestinvoker.ts similarity index 95% rename from Tasks/AzureTestPlanV0/Invokers/jestinvoker.ts rename to _generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/jestinvoker.ts index 753456bc5262..8cccf09b45e0 100644 --- a/Tasks/AzureTestPlanV0/Invokers/jestinvoker.ts +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/jestinvoker.ts @@ -1,6 +1,6 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); import { executeJestCommand } from '../testLibExecutor'; //Jest command like: >set JEST_JUNIT_OUTPUT_NAME=TEST-Jest0-junit.xml diff --git a/_generated/AzureTestPlanV0/Invokers/maveninvoker.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/maveninvoker.ts similarity index 89% rename from _generated/AzureTestPlanV0/Invokers/maveninvoker.ts rename to _generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/maveninvoker.ts index 34baa61174a3..05a228b4da58 100644 --- a/_generated/AzureTestPlanV0/Invokers/maveninvoker.ts +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/maveninvoker.ts @@ -1,8 +1,7 @@ -import { spawn } from '../testexecutor' import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); -import { execMavenBuild } from '../testLibExecutor'; +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); +import { execMavenBuild } from '../../OldAutomatedFlow/testLibExecutor'; export async function executeMavenTests(testsToBeExecuted: string[], pomFilePath?: string):Promise { diff --git a/_generated/AzureTestPlanV0_Node20/Invokers/pythoninvoker.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/pythoninvoker.ts similarity index 97% rename from _generated/AzureTestPlanV0_Node20/Invokers/pythoninvoker.ts rename to _generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/pythoninvoker.ts index 925cdc3bcbca..e736a0445515 100644 --- a/_generated/AzureTestPlanV0_Node20/Invokers/pythoninvoker.ts +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/Invokers/pythoninvoker.ts @@ -1,6 +1,6 @@ -import { spawn, SpawnResult } from '../testexecutor'; +import { spawn, SpawnResult } from '../../OldAutomatedFlow/testexecutor'; import tl = require('azure-pipelines-task-lib/task'); -import constants = require('../constants'); +import constants = require('../../Common/constants'); export async function executePythonTests(testsToBeExecuted: string[]):Promise { // Perform test discovery diff --git a/_generated/AzureTestPlanV0/automatedTestInvoker.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/automatedTestInvoker.ts similarity index 83% rename from _generated/AzureTestPlanV0/automatedTestInvoker.ts rename to _generated/AzureTestPlanV0/OldAutomatedFlow/automatedTestInvoker.ts index 7e5859e8d86b..656a76beb279 100644 --- a/_generated/AzureTestPlanV0/automatedTestInvoker.ts +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/automatedTestInvoker.ts @@ -1,10 +1,10 @@ import * as tl from 'azure-pipelines-task-lib/task' -import { executePythonTests } from './Invokers/pythoninvoker' -import { executeMavenTests } from './Invokers/maveninvoker' -import { executeGradleTests } from './Invokers/gradleinvoker' -import { ciDictionary } from './ciEventLogger'; -import { executeGoTests } from './Invokers/goinvoker'; -import { executeJestTests } from './Invokers/jestinvoker'; +import { executePythonTests } from '../OldAutomatedFlow/Invokers/pythoninvoker' +import { executeMavenTests } from '../OldAutomatedFlow/Invokers/maveninvoker' +import { executeGradleTests } from '../OldAutomatedFlow/Invokers/gradleinvoker' +import { ciDictionary } from '../Common/ciEventLogger'; +import { executeGoTests } from '../OldAutomatedFlow/Invokers/goinvoker'; +import { executeJestTests } from '../OldAutomatedFlow/Invokers/jestinvoker'; export async function testInvoker(testsToBeExecuted: string[], ciData: ciDictionary): Promise { diff --git a/_generated/AzureTestPlanV0/OldAutomatedFlow/automatedTests.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/automatedTests.ts new file mode 100644 index 000000000000..37feb0ab5ecd --- /dev/null +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/automatedTests.ts @@ -0,0 +1,72 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { testInvoker } from './automatedTestInvoker'; +import { TestPlanData } from '../testPlanData'; +import { publishAutomatedTestResult } from '../Common/publishAutomatedTests'; +import { ciDictionary } from '../Common/ciEventLogger'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import * as constant from '../Common/constants'; +import { IOperationResult } from '../Interface/IOperationResult'; + +export async function automatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { + let listOfTestsToBeExecuted: string[] = testPlanInfo?.listOfFQNOfTestCases ?? []; + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + if (listOfTestsToBeExecuted !== null && listOfTestsToBeExecuted !== undefined && listOfTestsToBeExecuted.length > 0) { + automatedTestInvokerResult = await executeTests(listOfTestsToBeExecuted, ciData); + + if(!automatedTestInvokerResult.returnCode){ + automatedTestInvokerResult = await publishResults(testPlanInfo, ciData, automatedTestInvokerResult); + } + } else { + automatedTestInvokerResult = handleNoTestsFound(testSelectorInput); + } + + return automatedTestInvokerResult; +} + +async function executeTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary): Promise { + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constant.AUTOMATED_EXECUTION); + + tl.debug('Invoking test execution for tests: ' + listOfTestsToBeExecuted); + executionTimer.start(); + + try { + automatedTestInvokerResult.returnCode = await testInvoker(listOfTestsToBeExecuted, ciData); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + executionTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +async function publishResults(testPlanInfo: TestPlanData, ciData: ciDictionary, automatedTestInvokerResult: IOperationResult): Promise { + let publishingTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); + publishingTimer.start(); + + try { + await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + publishingTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +function handleNoTestsFound(testSelectorInput: string): IOperationResult { + if (testSelectorInput === 'automatedTests') { + return { returnCode: 1, errorMessage: tl.loc('ErrorFailTaskOnNoAutomatedTestsFound') }; + } else { + console.log('No automated tests found for given test plan inputs '); + return { returnCode: 0, errorMessage: '' }; + } +} + diff --git a/Tasks/AzureTestPlanV0/testLibExecutor.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/testLibExecutor.ts similarity index 89% rename from Tasks/AzureTestPlanV0/testLibExecutor.ts rename to _generated/AzureTestPlanV0/OldAutomatedFlow/testLibExecutor.ts index 69a8219d2331..22bef3a0b30f 100644 --- a/Tasks/AzureTestPlanV0/testLibExecutor.ts +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/testLibExecutor.ts @@ -82,7 +82,7 @@ export async function execMavenBuild(args: string[]): Promise { try { // 1. Check that Maven exists by executing it to retrieve its version. - await mvnGetVersion.exec(); + await mvnGetVersion.execAsync(); // Setup Maven Executable to run list of test runs provided as input var mvnRun = tl.tool(mvnExec); @@ -90,7 +90,7 @@ export async function execMavenBuild(args: string[]): Promise { mvnRun.arg(args); // 3. Run Maven. Compilation or test errors will cause this to fail. - await mvnRun.exec(getExecOptions()); + await mvnRun.execAsync(getExecOptions()); // Maven build succeeded return 0; // Return 0 indicating success @@ -102,22 +102,10 @@ export async function execMavenBuild(args: string[]): Promise { } function getGradlewExec() { - const gradlewExecFileSearchPattern: string[] = ["**/gradlew"]; + const gradlewExecFileSearchPattern: string = "**/gradlew"; let workingDirectory = tl.getVariable('System.DefaultWorkingDirectory'); - - if (tl.getVariable('System.DefaultWorkingDirectory') && (!path.isAbsolute(workingDirectory))) { - workingDirectory = path.join(tl.getVariable('System.DefaultWorkingDirectory'), workingDirectory); - } - - tl.debug(workingDirectory); - - const findOptions = { - allowBrokenSymbolicLinks: true, - followSpecifiedSymbolicLink: true, - followSymbolicLinks: true - }; - - const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern, findOptions); + let os = tl.getVariable('Agent.OS'); + const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern); if (gradlewPath.length == 0) { tl.setResult(tl.TaskResult.Failed, "Missing gradlew file"); @@ -131,8 +119,8 @@ function getGradlewExec() { tl.debug(gradlewExec); } - if (isWindows) { - tl.debug('Append .bat extension name to gradlew script.'); + if (os == 'Windows_NT') { + tl.debug('Append .bat extension name to gradlew script for windows agent'); gradlewExec += '.bat'; } diff --git a/Tasks/AzureTestPlanV0/testexecutor.ts b/_generated/AzureTestPlanV0/OldAutomatedFlow/testexecutor.ts similarity index 81% rename from Tasks/AzureTestPlanV0/testexecutor.ts rename to _generated/AzureTestPlanV0/OldAutomatedFlow/testexecutor.ts index 38061d4b9899..6849796915d5 100644 --- a/Tasks/AzureTestPlanV0/testexecutor.ts +++ b/_generated/AzureTestPlanV0/OldAutomatedFlow/testexecutor.ts @@ -1,8 +1,4 @@ -import * as path from 'path'; -import * as fs from 'fs'; -import * as semver from "semver" import { spawnSync } from 'child_process' -import tl = require('azure-pipelines-task-lib/task'); export async function spawn(executable: string, args: string[]): Promise { diff --git a/_generated/AzureTestPlanV0/automatedTests.ts b/_generated/AzureTestPlanV0/automatedTests.ts deleted file mode 100644 index e049d1593b90..000000000000 --- a/_generated/AzureTestPlanV0/automatedTests.ts +++ /dev/null @@ -1,48 +0,0 @@ -import tl = require('azure-pipelines-task-lib/task'); -import { testInvoker } from './automatedTestInvoker'; -import { TestPlanData } from './testPlanData'; -import { publishAutomatedTestResult } from './publishAutomatedTests'; -import { ciDictionary } from './ciEventLogger'; -import { SimpleTimer } from './SimpleTimer'; -import * as constant from './constants'; - -export async function automatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { - let listOfTestsToBeExecuted: string[] = testPlanInfo.listOfFQNOfTestCases; - let testInvokerStatusCode = 0; - - if (listOfTestsToBeExecuted !== null && listOfTestsToBeExecuted !== undefined && listOfTestsToBeExecuted.length > 0) { - tl.debug('Invoking test execution for tests: ' + listOfTestsToBeExecuted); - - var simpleTimer = new SimpleTimer(constant.AUTOMATED_EXECUTION); - simpleTimer.start(); - try { - testInvokerStatusCode = await testInvoker(listOfTestsToBeExecuted, ciData); - } catch (err) { - tl.debug(`Unable to invoke automated test execution. Err:( ${err} )`); - testInvokerStatusCode = 1; - } - simpleTimer.stop(ciData); - - simpleTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); - simpleTimer.start(); - try { - await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); - } catch (err) { - tl.error(`Error while publishing automated Test Results with err : ( ${err} )`); - testInvokerStatusCode = 1; - } - simpleTimer.stop(ciData); - - tl.debug(`Execution Status Code for test Invoker: ${testInvokerStatusCode}`); - return testInvokerStatusCode; - } else { - console.log('No automated tests found for given test plan inputs '); - if (testSelectorInput === 'automatedTests') { - tl.setResult(tl.TaskResult.Failed, tl.loc('ErrorFailTaskOnNoAutomatedTestsFound')); - return 1; - } else { - tl.setResult(tl.TaskResult.Succeeded, 'Successfully triggered manual test execution'); - return 0; - } - } -} diff --git a/_generated/AzureTestPlanV0/manualTests.ts b/_generated/AzureTestPlanV0/manualTests.ts deleted file mode 100644 index b55904291ddd..000000000000 --- a/_generated/AzureTestPlanV0/manualTests.ts +++ /dev/null @@ -1,27 +0,0 @@ -import tl = require('azure-pipelines-task-lib/task'); -import { TestPlanData, createManualTestRun, ManualTestRunData } from './testPlanData'; -import { ciDictionary } from './ciEventLogger'; -import * as constant from './constants'; -import { SimpleTimer } from './SimpleTimer'; - -export async function manualTestsFlow(testPlanInfo: TestPlanData, ciData: ciDictionary):Promise { - - let manualTestRun: ManualTestRunData = { testRunId: 0, runUrl: "" }; - - let simpleTimer = new SimpleTimer(constant.MANUALTESTS_PUBLISHING); - - simpleTimer.start(); - try{ - manualTestRun = await createManualTestRun(testPlanInfo); - } - catch (err){ - tl.debug(`Unable to create Manual Test Run. Err:( ${err} )`); - return 1; - } - simpleTimer.stop(ciData); - - console.log('Test run id created: ', manualTestRun.testRunId); - console.log('Test run url: ', manualTestRun.runUrl); - - return 0; -} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/package-lock.json b/_generated/AzureTestPlanV0/package-lock.json index b674cfb4e578..9aa328550ec9 100644 --- a/_generated/AzureTestPlanV0/package-lock.json +++ b/_generated/AzureTestPlanV0/package-lock.json @@ -1,123 +1,182 @@ { "name": "azure-tasks-runTestPlan", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@azure/msal-common": { + "packages": { + "": { + "name": "azure-tasks-runTestPlan", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@types/mocha": "^9.1.1", + "@types/node": "^16.11.39", + "@types/q": "^1.0.7", + "@types/uuid": "^8.3.0", + "agent-base": "6.0.2", + "axios": "^1.7.7", + "azure-devops-node-api": "^12.2.0", + "azure-pipelines-task-lib": "^4.15.0", + "azure-pipelines-tasks-docker-common": "^2.242.0", + "azure-pipelines-tasks-utility-common": "^3.212.0", + "azure-pipelines-tool-lib": "^2.0.0-preview", + "performance-now": "0.2.0", + "typed-rest-client": "^1.8.9" + }, + "devDependencies": { + "typescript": "4.9.5" + } + }, + "node_modules/@azure/msal-common": { "version": "13.3.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha1-ASRlv5QNEjddxHOHt1TM+da5IYA=" + "integrity": "sha1-ASRlv5QNEjddxHOHt1TM+da5IYA=", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } }, - "@types/jsonwebtoken": { + "node_modules/@types/jsonwebtoken": { "version": "8.5.9", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", "integrity": "sha1-LAZOywsxKNg30nZKoLEXsP9uRYY=", - "requires": { + "license": "MIT", + "dependencies": { "@types/node": "*" } }, - "@types/mocha": { + "node_modules/@types/mocha": { "version": "9.1.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha1-58TxAB7vpLivvR7uJ6I3/uO/KcQ=" + "integrity": "sha1-58TxAB7vpLivvR7uJ6I3/uO/KcQ=", + "license": "MIT" }, - "@types/node": { + "node_modules/@types/node": { "version": "16.18.122", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.18.122.tgz", - "integrity": "sha1-VJSN2+Ld74FE7hazfxYOP5nDI5c=" + "integrity": "sha1-VJSN2+Ld74FE7hazfxYOP5nDI5c=", + "license": "MIT" }, - "@types/q": { + "node_modules/@types/q": { "version": "1.5.8", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.8.tgz", - "integrity": "sha1-lfbGoI8q2Gi6Iw6tHS1/e+PbODc=" + "integrity": "sha1-lfbGoI8q2Gi6Iw6tHS1/e+PbODc=", + "license": "MIT" }, - "@types/semver": { + "node_modules/@types/semver": { "version": "5.5.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha1-FGwqKe59O65L8vyydGNuJkyBPEU=" + "integrity": "sha1-FGwqKe59O65L8vyydGNuJkyBPEU=", + "license": "MIT" }, - "@types/uuid": { + "node_modules/@types/uuid": { "version": "8.3.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-8.3.4.tgz", - "integrity": "sha1-vYakNhffBZR4fTi3NfVcgFvs8bw=" + "integrity": "sha1-vYakNhffBZR4fTi3NfVcgFvs8bw=", + "license": "MIT" }, - "adm-zip": { + "node_modules/adm-zip": { "version": "0.5.16", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/adm-zip/-/adm-zip-0.5.16.tgz", - "integrity": "sha1-C15Md58H3t6lgFzcyxFHBx2UqQk=" + "integrity": "sha1-C15Md58H3t6lgFzcyxFHBx2UqQk=", + "license": "MIT", + "engines": { + "node": ">=12.0" + } }, - "agent-base": { + "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha1-Sf/1hXfP7j83F2/qtMIuAPhtf3c=", - "requires": { + "license": "MIT", + "dependencies": { "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "argparse": { + "node_modules/argparse": { "version": "1.0.10", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/argparse/-/argparse-1.0.10.tgz", "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "requires": { + "license": "MIT", + "dependencies": { "sprintf-js": "~1.0.2" } }, - "array-union": { + "node_modules/array-union": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "requires": { + "license": "MIT", + "dependencies": { "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "array-uniq": { + "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "arrify": { + "node_modules/arrify": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "async-mutex": { + "node_modules/async-mutex": { "version": "0.4.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/async-mutex/-/async-mutex-0.4.1.tgz", "integrity": "sha1-vM9VuW8rr435DteYy1VEofbuTCw=", - "requires": { + "license": "MIT", + "dependencies": { "tslib": "^2.4.0" } }, - "asynckit": { + "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "license": "MIT" }, - "axios": { + "node_modules/axios": { "version": "1.7.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/axios/-/axios-1.7.7.tgz", "integrity": "sha1-L1VClvmJKnKsjY5MW3nBSpHQpH8=", - "requires": { + "license": "MIT", + "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } }, - "azure-devops-node-api": { + "node_modules/azure-devops-node-api": { "version": "12.5.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", "integrity": "sha1-OLnv18WsdDVP5Ojb5CaX2wuOhaU=", - "requires": { + "license": "MIT", + "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" } }, - "azure-pipelines-task-lib": { + "node_modules/azure-pipelines-task-lib": { "version": "4.17.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", "integrity": "sha1-/VMnGollIKefO6iDOcwLNiv51bk=", - "requires": { + "license": "MIT", + "dependencies": { "adm-zip": "^0.5.10", "minimatch": "3.0.5", "nodejs-file-downloader": "^4.11.1", @@ -127,11 +186,12 @@ "uuid": "^3.0.1" } }, - "azure-pipelines-tasks-azure-arm-rest": { + "node_modules/azure-pipelines-tasks-azure-arm-rest": { "version": "3.251.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.251.0.tgz", "integrity": "sha1-9989r2zWGXLLREIAQHuYci00+EM=", - "requires": { + "license": "MIT", + "dependencies": { "@types/jsonwebtoken": "^8.5.8", "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", @@ -147,65 +207,83 @@ "q": "1.5.1", "typed-rest-client": "^2.0.1", "xml2js": "0.6.2" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", + "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha1-6Ps/JClZ20TWO+Zl23qOc5U3oyw=", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-devops-node-api": { + "version": "14.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", + "integrity": "sha1-7FOT3p+hRjmd6qtpBOQdoD7c4YA=", + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "2.1.0" }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha1-cCtx+1UgoTKmbeH2dUHZ5iFU2Cs=", + "license": "MIT", "dependencies": { - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=" - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", - "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", - "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=" - }, - "agent-base": { - "version": "5.1.1", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha1-6Ps/JClZ20TWO+Zl23qOc5U3oyw=" - }, - "azure-devops-node-api": { - "version": "14.1.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", - "integrity": "sha1-7FOT3p+hRjmd6qtpBOQdoD7c4YA=", - "requires": { - "tunnel": "0.0.6", - "typed-rest-client": "2.1.0" - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha1-cCtx+1UgoTKmbeH2dUHZ5iFU2Cs=", - "requires": { - "agent-base": "5", - "debug": "4" - } - }, - "typed-rest-client": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", - "requires": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - } + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/typed-rest-client": { + "version": "2.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", + "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", + "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" } }, - "azure-pipelines-tasks-docker-common": { + "node_modules/azure-pipelines-tasks-docker-common": { "version": "2.247.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-docker-common/-/azure-pipelines-tasks-docker-common-2.247.0.tgz", "integrity": "sha1-fs3fLL5BF7J8DZZZwXmsWLs2xUs=", - "requires": { + "license": "MIT", + "dependencies": { "@types/mocha": "^5.2.7", "@types/node": "^10.17.0", "@types/q": "1.5.4", @@ -214,67 +292,79 @@ "azure-pipelines-tasks-azure-arm-rest": "^3.242.2", "del": "2.2.0", "q": "1.4.1" - }, - "dependencies": { - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=" - }, - "@types/node": { - "version": "10.17.60", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", - "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=" - }, - "@types/q": { - "version": "1.5.4", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", - "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=" - }, - "q": { - "version": "1.4.1", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.4.1.tgz", - "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" - } } }, - "azure-pipelines-tasks-utility-common": { + "node_modules/azure-pipelines-tasks-docker-common/node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha1-MV1XDMtWxTRS/4Y4c432BybVtuo=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-docker-common/node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-10.17.60.tgz", + "integrity": "sha1-NfPWIT2u2V2n8Pc+dbzGmA6QWXs=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-docker-common/node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/q/-/q-1.5.4.tgz", + "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-docker-common/node_modules/q": { + "version": "1.4.1", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=", + "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 (http://github.com/kriskowal/q/raw/master/LICENSE)", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/azure-pipelines-tasks-utility-common": { "version": "3.246.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.246.0.tgz", "integrity": "sha1-+AfA6GAxHX81X9Y4YhTuuacwa2A=", - "requires": { + "license": "MIT", + "dependencies": { "@types/node": "~16.11.39", "azure-pipelines-task-lib": "^4.11.0", "azure-pipelines-tool-lib": "^2.0.7", "js-yaml": "3.13.1", "semver": "^5.7.2", "typed-rest-client": "2.1.0" - }, + } + }, + "node_modules/azure-pipelines-tasks-utility-common/node_modules/@types/node": { + "version": "16.11.68", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.11.68.tgz", + "integrity": "sha1-MO6SP02UB5PgOA9c5hwL1LcZa2w=", + "license": "MIT" + }, + "node_modules/azure-pipelines-tasks-utility-common/node_modules/typed-rest-client": { + "version": "2.1.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", + "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", + "license": "MIT", "dependencies": { - "@types/node": { - "version": "16.11.68", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/node/-/node-16.11.68.tgz", - "integrity": "sha1-MO6SP02UB5PgOA9c5hwL1LcZa2w=" - }, - "typed-rest-client": { - "version": "2.1.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha1-8Exs/KvGASwtA2uAbqrEVWBPFZg=", - "requires": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - } + "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" } }, - "azure-pipelines-tool-lib": { + "node_modules/azure-pipelines-tool-lib": { "version": "2.0.8", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.8.tgz", "integrity": "sha1-S9vVPAQsrcivQ6v2sNyspzUNDPk=", - "requires": { + "license": "MIT", + "dependencies": { "@types/semver": "^5.3.0", "@types/uuid": "^3.4.5", "azure-pipelines-task-lib": "^4.1.0", @@ -282,78 +372,106 @@ "semver-compare": "^1.0.0", "typed-rest-client": "^1.8.6", "uuid": "^3.3.2" - }, - "dependencies": { - "@types/uuid": { - "version": "3.4.13", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-3.4.13.tgz", - "integrity": "sha1-/okOUX+4QGIL4oTuIT6B1wKx92s=" - } } }, - "balanced-match": { + "node_modules/azure-pipelines-tool-lib/node_modules/@types/uuid": { + "version": "3.4.13", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@types/uuid/-/uuid-3.4.13.tgz", + "integrity": "sha1-/okOUX+4QGIL4oTuIT6B1wKx92s=", + "license": "MIT" + }, + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=" + "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", + "license": "MIT" }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", - "requires": { + "license": "MIT", + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "buffer-equal-constant-time": { + "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "license": "BSD-3-Clause" }, - "call-bind-apply-helpers": { + "node_modules/call-bind-apply-helpers": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", "integrity": "sha1-MuWJLmNhspsLVFum93YzeNrKKEA=", - "requires": { + "license": "MIT", + "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "call-bound": { + "node_modules/call-bound": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/call-bound/-/call-bound-1.0.3.tgz", "integrity": "sha1-Qc/QMrWT45F2pxUzq084SqBP1oE=", - "requires": { + "license": "MIT", + "dependencies": { "call-bind-apply-helpers": "^1.0.1", "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "combined-stream": { + "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", - "requires": { + "license": "MIT", + "dependencies": { "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "license": "MIT" }, - "debug": { + "node_modules/debug": { "version": "4.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/debug/-/debug-4.4.0.tgz", "integrity": "sha1-Kz8q6i/+t3ZHdGAmc3fchxD6uoo=", - "requires": { + "license": "MIT", + "dependencies": { "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "del": { + "node_modules/del": { "version": "2.2.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/del/-/del-2.2.0.tgz", "integrity": "sha1-mlDwS/NzJeKDtPROmFM2wlJFa9U=", - "requires": { + "license": "MIT", + "dependencies": { "globby": "^4.0.0", "is-path-cwd": "^1.0.0", "is-path-in-cwd": "^1.0.0", @@ -361,93 +479,151 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=0.10.0" } }, - "delayed-stream": { + "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } }, - "des.js": { + "node_modules/des.js": { "version": "1.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/des.js/-/des.js-1.1.0.tgz", "integrity": "sha1-HTf1dm87v/Tuljjocah2jBc7gdo=", - "requires": { + "license": "MIT", + "dependencies": { "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" } }, - "dunder-proto": { + "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/dunder-proto/-/dunder-proto-1.0.1.tgz", "integrity": "sha1-165mfh3INIL4tw/Q9u78UNow9Yo=", - "requires": { + "license": "MIT", + "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, - "ecdsa-sig-formatter": { + "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha1-rg8PothQRe8UqBfao86azQSJ5b8=", - "requires": { + "license": "Apache-2.0", + "dependencies": { "safe-buffer": "^5.0.1" } }, - "es-define-property": { + "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=" + "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "es-errors": { + "node_modules/es-errors": { "version": "1.3.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=" + "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "es-object-atoms": { + "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha1-3bVc1HrC4kBwEmC8Ko4x7LZD2UE=", - "requires": { + "license": "MIT", + "dependencies": { "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" } }, - "esprima": { + "node_modules/esprima": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=" + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "follow-redirects": { + "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha1-pgT6EORDv5jKlCKNnuvMLoosjuE=" + "integrity": "sha1-pgT6EORDv5jKlCKNnuvMLoosjuE=", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "form-data": { + "node_modules/form-data": { "version": "4.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/form-data/-/form-data-4.0.0.tgz", "integrity": "sha1-k5Gdrq82HuUpWEubMWZNwSyfpFI=", - "requires": { + "license": "MIT", + "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "license": "ISC" }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=" + "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.2.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/get-intrinsic/-/get-intrinsic-1.2.6.tgz", "integrity": "sha1-Q9090Oe0m4Ky38rRDcgkv3/CZdU=", - "requires": { + "license": "MIT", + "dependencies": { "call-bind-apply-helpers": "^1.0.1", "dunder-proto": "^1.0.0", "es-define-property": "^1.0.1", @@ -458,13 +634,21 @@ "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "glob": { + "node_modules/glob": { "version": "7.2.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-7.2.3.tgz", "integrity": "sha1-uN8PuAK7+o6JvR2Ti04WV47UTys=", - "requires": { + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", @@ -472,22 +656,31 @@ "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://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", + "license": "ISC", "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha1-Gc0ZS/0+Qo8EmnCBfAONiatL41s=", - "requires": { - "brace-expansion": "^1.1.7" - } - } + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "globby": { + "node_modules/globby": { "version": "4.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/globby/-/globby-4.1.0.tgz", "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "requires": { + "license": "MIT", + "dependencies": { "array-union": "^1.0.1", "arrify": "^1.0.0", "glob": "^6.0.1", @@ -495,115 +688,175 @@ "pify": "^2.0.0", "pinkie-promise": "^2.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globby/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "gopd": { + "node_modules/gopd": { "version": "1.2.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=" + "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=" + "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "hasown": { + "node_modules/hasown": { "version": "2.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/hasown/-/hasown-2.0.2.tgz", "integrity": "sha1-AD6vkb563DcuhOxZ3DclLO24AAM=", - "requires": { + "license": "MIT", + "dependencies": { "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "https-proxy-agent": { + "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", "integrity": "sha1-xZ7yJKBP6LdU89sAY6Jeow0ABdY=", - "requires": { + "license": "MIT", + "dependencies": { "agent-base": "6", "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { + "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" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=" + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "license": "ISC" }, - "interpret": { + "node_modules/interpret": { "version": "1.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=" + "integrity": "sha1-Zlq4vE2iendKQFhOgS4+D6RbGh4=", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.16.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-core-module/-/is-core-module-2.16.0.tgz", "integrity": "sha1-bAH/3V4zxJwdKr+pMzSoXLVr2Bw=", - "requires": { + "license": "MIT", + "dependencies": { "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-path-cwd": { + "node_modules/is-path-cwd": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "is-path-in-cwd": { + "node_modules/is-path-in-cwd": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=", - "requires": { + "license": "MIT", + "dependencies": { "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-path-inside": { + "node_modules/is-path-inside": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", - "requires": { + "license": "MIT", + "dependencies": { "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "js-md4": { + "node_modules/js-md4": { "version": "0.3.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha1-zTs9wEWwxARVbIHdtXVsI+WdfPU=" + "integrity": "sha1-zTs9wEWwxARVbIHdtXVsI+WdfPU=", + "license": "MIT" }, - "js-yaml": { + "node_modules/js-yaml": { "version": "3.13.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", - "requires": { + "license": "MIT", + "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsonwebtoken": { + "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", "integrity": "sha1-Zf+R9KvvF4RpfUCVK7GZjFBMqvM=", - "requires": { + "license": "MIT", + "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", @@ -615,440 +868,658 @@ "ms": "^2.1.1", "semver": "^7.5.4" }, - "dependencies": { - "semver": { - "version": "7.6.3", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-7.6.3.tgz", - "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=" - } + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-7.6.3.tgz", + "integrity": "sha1-mA97VVC8F1+03AlAMIVif56zMUM=", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "jwa": { + "node_modules/jwa": { "version": "1.4.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jwa/-/jwa-1.4.1.tgz", "integrity": "sha1-dDwymFy56YZVUw1TZBtmyGRbA5o=", - "requires": { + "license": "MIT", + "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, - "jws": { + "node_modules/jws": { "version": "3.2.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/jws/-/jws-3.2.2.tgz", "integrity": "sha1-ABCZ82OUaMlBQADpmZX6UvtHgwQ=", - "requires": { + "license": "MIT", + "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" } }, - "lodash.includes": { + "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "license": "MIT" }, - "lodash.isboolean": { + "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "license": "MIT" }, - "lodash.isinteger": { + "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "license": "MIT" }, - "lodash.isnumber": { + "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "license": "MIT" }, - "lodash.isplainobject": { + "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "license": "MIT" }, - "lodash.isstring": { + "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "license": "MIT" }, - "lodash.once": { + "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "license": "MIT" }, - "math-intrinsics": { + "node_modules/math-intrinsics": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/math-intrinsics/-/math-intrinsics-1.0.0.tgz", - "integrity": "sha1-TgS/h8hapR6Q0HjawiUrTrUmCBc=" + "integrity": "sha1-TgS/h8hapR6Q0HjawiUrTrUmCBc=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=" + "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", - "requires": { + "license": "MIT", + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "minimalistic-assert": { + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=" + "integrity": "sha1-LhlN4ERibUoQ5/f7wAznPoPk1cc=", + "license": "ISC" }, - "minimatch": { + "node_modules/minimatch": { "version": "3.0.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha1-TajxKQ7g8PjoPWDKafjxNAaGBKM=", - "requires": { + "license": "ISC", + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "ms": { + "node_modules/ms": { "version": "2.1.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=" + "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", + "license": "MIT" }, - "msalv1": { - "version": "npm:@azure/msal-node@1.18.4", + "node_modules/msalv1": { + "name": "@azure/msal-node", + "version": "1.18.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-node/-/msal-node-1.18.4.tgz", "integrity": "sha1-ySGwRHyS+zsMsev1qadvytLsfCE=", - "requires": { + "dependencies": { "@azure/msal-common": "13.3.1", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=" - } } }, - "msalv2": { - "version": "npm:@azure/msal-node@2.16.2", + "node_modules/msalv1/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/msalv2": { + "name": "@azure/msal-node", + "version": "2.16.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-node/-/msal-node-2.16.2.tgz", "integrity": "sha1-Prdo02iD6m+ak5wLW0Z7UY54//w=", - "requires": { + "dependencies": { "@azure/msal-common": "14.16.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" - }, - "dependencies": { - "@azure/msal-common": { - "version": "14.16.0", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-common/-/msal-common-14.16.0.tgz", - "integrity": "sha1-80cPyux4jb5QhZlSzUmTQL2iPXo=" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=" - } } }, - "node-fetch": { + "node_modules/msalv2/node_modules/@azure/msal-common": { + "version": "14.16.0", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/@azure/msal-common/-/msal-common-14.16.0.tgz", + "integrity": "sha1-80cPyux4jb5QhZlSzUmTQL2iPXo=", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/msalv2/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha1-gNW1ztJxu5r2xEXyGhoExgbO++I=", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha1-0PD6bj4twdJ+/NitmdVQvalNGH0=", - "requires": { + "license": "MIT", + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "nodejs-file-downloader": { + "node_modules/nodejs-file-downloader": { "version": "4.13.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", "integrity": "sha1-2ofDAIHeX/TouGQGLJjN7APmatA=", - "requires": { + "license": "ISC", + "dependencies": { "follow-redirects": "^1.15.6", "https-proxy-agent": "^5.0.0", "mime-types": "^2.1.27", "sanitize-filename": "^1.6.3" } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { + "node_modules/object-inspect": { "version": "1.13.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha1-8UwYPeURMCQ9bRiuFJN1/1DqSIo=" + "integrity": "sha1-8UwYPeURMCQ9bRiuFJN1/1DqSIo=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { + "license": "ISC", + "dependencies": { "wrappy": "1" } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "path-is-inside": { + "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "license": "(WTFPL OR MIT)" }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=" + "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=", + "license": "MIT" }, - "performance-now": { + "node_modules/performance-now": { "version": "0.2.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", + "license": "MIT" }, - "pify": { + "node_modules/pify": { "version": "2.3.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "pinkie": { + "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "pinkie-promise": { + "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "requires": { + "license": "MIT", + "dependencies": { "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "proxy-from-env": { + "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=" + "integrity": "sha1-4QLxbKNVQkhldV0sno6k8k1Yw+I=", + "license": "MIT" }, - "q": { + "node_modules/q": { "version": "1.5.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "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" + } }, - "qs": { + "node_modules/qs": { "version": "6.13.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/qs/-/qs-6.13.1.tgz", "integrity": "sha1-POX8cr06gXG4XJm5PGXdILfRsW4=", - "requires": { + "license": "BSD-3-Clause", + "dependencies": { "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "rechoir": { + "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "requires": { + "dependencies": { "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "resolve": { + "node_modules/resolve": { "version": "1.22.9", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/resolve/-/resolve-1.22.9.tgz", "integrity": "sha1-baduTNxXGB+kRxIxQA6IUdCpJPM=", - "requires": { + "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" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "rimraf": { + "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha1-NXl/E6f9rcVmFCwp1PB8ytSD4+w=", - "requires": { + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=" + "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", + "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" }, - "sanitize-filename": { + "node_modules/sanitize-filename": { "version": "1.6.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sanitize-filename/-/sanitize-filename-1.6.3.tgz", "integrity": "sha1-dV69dSBFkxl34wsgJdNA18kJA3g=", - "requires": { + "license": "WTFPL OR ISC", + "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, - "sax": { + "node_modules/sax": { "version": "1.4.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sax/-/sax-1.4.1.tgz", - "integrity": "sha1-RMyJiDd/EmME07P8EBDHM7kp7w8=" + "integrity": "sha1-RMyJiDd/EmME07P8EBDHM7kp7w8=", + "license": "ISC" }, - "semver": { + "node_modules/semver": { "version": "5.7.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver/-/semver-5.7.2.tgz", - "integrity": "sha1-SNVdtzfDKHzUg14X+hP+rOHEHvg=" + "integrity": "sha1-SNVdtzfDKHzUg14X+hP+rOHEHvg=", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } }, - "semver-compare": { + "node_modules/semver-compare": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=" + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "license": "MIT" }, - "shelljs": { + "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha1-3gVUCNg2G+1mxmnS8ABTjO2O4gw=", - "requires": { + "license": "BSD-3-Clause", + "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel/-/side-channel-1.1.0.tgz", "integrity": "sha1-w/z/nE2pMnhIczNeyXZfqU/2a8k=", - "requires": { + "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" } }, - "side-channel-list": { + "node_modules/side-channel-list": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-list/-/side-channel-list-1.0.0.tgz", "integrity": "sha1-EMtZhCYxFdO3oOM2WR4pCoMK+K0=", - "requires": { + "license": "MIT", + "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "side-channel-map": { + "node_modules/side-channel-map": { "version": "1.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-map/-/side-channel-map-1.0.1.tgz", "integrity": "sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=", - "requires": { + "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" } }, - "side-channel-weakmap": { + "node_modules/side-channel-weakmap": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", "integrity": "sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=", - "requires": { + "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" } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "license": "BSD-3-Clause" }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha1-btpL00SjyUrqN21MwxvHcxEDngk=" + "integrity": "sha1-btpL00SjyUrqN21MwxvHcxEDngk=", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "license": "MIT" }, - "truncate-utf8-bytes": { + "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", - "requires": { + "license": "WTFPL", + "dependencies": { "utf8-byte-length": "^1.0.1" } }, - "tslib": { + "node_modules/tslib": { "version": "2.8.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=" + "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", + "license": "0BSD" }, - "tunnel": { + "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=" + "integrity": "sha1-cvExSzSlsZLbASMk3yzFh8pH+Sw=", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } }, - "typed-rest-client": { + "node_modules/typed-rest-client": { "version": "1.8.11", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typed-rest-client/-/typed-rest-client-1.8.11.tgz", "integrity": "sha1-aQbwLjyR6NhRV58lWr8P1ggAoE0=", - "requires": { + "license": "MIT", + "dependencies": { "qs": "^6.9.1", "tunnel": "0.0.6", "underscore": "^1.12.1" } }, - "typescript": { + "node_modules/typescript": { "version": "4.9.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/typescript/-/typescript-4.9.5.tgz", "integrity": "sha1-CVl5+bzA0J2jJNWNA86Pg3TL5lo=", - "dev": true + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "underscore": { + "node_modules/underscore": { "version": "1.13.7", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha1-lw4zljr5p92iKPF+voOZ5fvmOhA=" + "integrity": "sha1-lw4zljr5p92iKPF+voOZ5fvmOhA=", + "license": "MIT" }, - "utf8-byte-length": { + "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", - "integrity": "sha1-+fY5ENFVNu4rLV3UZlOJcV6sXB4=" + "integrity": "sha1-+fY5ENFVNu4rLV3UZlOJcV6sXB4=", + "license": "(WTFPL OR MIT)" }, - "uuid": { + "node_modules/uuid": { "version": "3.4.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=" + "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=", + "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" + } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "license": "BSD-2-Clause" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { + "license": "MIT", + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "license": "ISC" }, - "xml2js": { + "node_modules/xml2js": { "version": "0.6.2", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/xml2js/-/xml2js-0.6.2.tgz", "integrity": "sha1-3QtjAIOqCcFh4lpNCQHisqkptJk=", - "requires": { + "license": "MIT", + "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "xmlbuilder": { + "node_modules/xmlbuilder": { "version": "11.0.1", "resolved": "https://pkgs.dev.azure.com/mseng/PipelineTools/_packaging/PipelineTools_PublicPackages/npm/registry/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=" + "integrity": "sha1-vpuuHIoEbnazESdyY0fQrXACvrM=", + "license": "MIT", + "engines": { + "node": ">=4.0" + } } } -} \ No newline at end of file +} diff --git a/_generated/AzureTestPlanV0/runTestPlan.ts b/_generated/AzureTestPlanV0/runTestPlan.ts index 1f4e89b5876a..d6aa570e120a 100644 --- a/_generated/AzureTestPlanV0/runTestPlan.ts +++ b/_generated/AzureTestPlanV0/runTestPlan.ts @@ -1,48 +1,72 @@ import * as tl from 'azure-pipelines-task-lib/task'; -import { manualTestsFlow } from './manualTests' +import { manualTestsFlow } from './Manual Flow/manualTests' import { getTestPlanData, TestPlanData } from './testPlanData' -import { automatedTestsFlow } from './automatedTests' -import { publishEvent, ciDictionary } from './ciEventLogger'; +import { automatedTestsFlow } from './OldAutomatedFlow/automatedTests' +import { publishEvent, ciDictionary } from './Common/ciEventLogger'; +import { IOperationResult } from './Interface/IOperationResult'; +import { newAutomatedTestsFlow } from './Automated Flow/automatedFlow'; + +function setupCiData(testSelectorInput: string, testPlanInfo: TestPlanData) { + let ciData: ciDictionary = { + TestSelector: testSelectorInput, + totalNumOfManualTestPoint: testPlanInfo.listOfManualTestPoints.length, + totalNumOfAutomatedTestPoint: testPlanInfo.listOfAutomatedTestPoints.length, + totalNumOfTestSuites: testPlanInfo.testSuiteIds.length + } + + return ciData; +} export async function run() { const testSelectorInput = tl.getInput('testSelector'); console.log('Test Selector selected : ' + testSelectorInput); - var ciData: ciDictionary = { - TestSelector: testSelectorInput, - totalNumOfManualTestPoint: 0, - totalNumOfAutomatedTestPoint: 0, - totalNumOfTestSuites: 0 + let testPlanInfo: TestPlanData; + try { + testPlanInfo = await getTestPlanData(); + } catch (err) { + tl.setResult(tl.TaskResult.Failed, `Error in fetching test plan data: ${err}`); + return 1; } - const testPlanInfo = await getTestPlanData(); + let ciData: ciDictionary = setupCiData(testSelectorInput, testPlanInfo); - ciData.totalNumOfAutomatedTestPoint = testPlanInfo.listOfAutomatedTestPoints.length; - ciData.totalNumOfManualTestPoint = testPlanInfo.listOfManualTestPoints.length; - ciData.totalNumOfTestSuites = testPlanInfo.testSuiteIds.length; - - let manualTestFlowReturnCode = 0; - let automatedTestFlowReturnCode = 0; + let manualFlowResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let automatedFlowResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const myEnvVar = tl.getVariable('Use_NewAutomatedFlow'); + tl.debug(`The value of Use_NewAutomatedFlow is: ${myEnvVar}`); // trigger manual, automated or both tests based on user's input if (testSelectorInput.includes('manualTests')) { - manualTestFlowReturnCode = await manualTestsFlow(testPlanInfo, ciData); - tl.debug(`Execution Status Code for Manual Test Flow is ${manualTestFlowReturnCode}`); - ciData["manualTestFlowReturnCode"] = manualTestFlowReturnCode; + manualFlowResult = await manualTestsFlow(testPlanInfo, ciData); + tl.debug(`Execution Status Code for Manual Test Flow is ${manualFlowResult.returnCode}`); + + if(manualFlowResult.returnCode){ + tl.debug(`Error in Manual Test Flow: ${manualFlowResult.errorMessage}`); + } + ciData["manualTestFlowReturnCode"] = manualFlowResult.returnCode; } if (testSelectorInput.includes('automatedTests')) { - automatedTestFlowReturnCode = await automatedTestsFlow(testPlanInfo, testSelectorInput, ciData); - tl.debug(`Execution Status Code for Automated Test Flow is ${automatedTestFlowReturnCode}`); - ciData["automatedTestFlowReturnCode"] = automatedTestFlowReturnCode; + if(myEnvVar){ + automatedFlowResult = await newAutomatedTestsFlow(testPlanInfo, testSelectorInput, ciData); + tl.debug(`Execution Status Code for Automated Test Flow is ${automatedFlowResult.returnCode}`); + ciData["automatedTestFlowReturnCode"] = automatedFlowResult.returnCode; + } + else{ + automatedFlowResult = await automatedTestsFlow(testPlanInfo, testSelectorInput, ciData); + tl.debug(`Execution Status Code for Automated Test Flow is ${automatedFlowResult.returnCode}`); + ciData["automatedTestFlowReturnCode"] = automatedFlowResult.returnCode; + + } } - if( manualTestFlowReturnCode || automatedTestFlowReturnCode){ + if( manualFlowResult.returnCode || automatedFlowResult.returnCode){ tl.setResult(tl.TaskResult.Failed, "Faced error in execution."); } publishEvent(ciData); } -run(); +run(); \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/task.json b/_generated/AzureTestPlanV0/task.json index 51d54361a4bd..7d7a04b669da 100644 --- a/_generated/AzureTestPlanV0/task.json +++ b/_generated/AzureTestPlanV0/task.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 250, - "Patch": 10 + "Minor": 252, + "Patch": 8 }, "preview": true, "demands": [], @@ -163,6 +163,10 @@ "Node16": { "target": "runTestPlan.js", "argumentFormat": "" + }, + "Node20_1": { + "target": "runTestPlan.js", + "argumentFormat": "" } }, "messages": { @@ -178,8 +182,8 @@ "MultipleMatchingGradlewFound": "Multiple gradlew files found. Selecting the first matched instance" }, "_buildConfigMapping": { - "Default": "0.250.10", + "Default": "0.252.8", "LocalPackages": "0.249.4", - "Node20-225": "0.250.11" + "Node20-225": "0.252.9" } } \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/task.loc.json b/_generated/AzureTestPlanV0/task.loc.json index ecc1cfc71967..84eb1f539292 100644 --- a/_generated/AzureTestPlanV0/task.loc.json +++ b/_generated/AzureTestPlanV0/task.loc.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 250, - "Patch": 10 + "Minor": 252, + "Patch": 8 }, "preview": true, "demands": [], @@ -163,6 +163,10 @@ "Node16": { "target": "runTestPlan.js", "argumentFormat": "" + }, + "Node20_1": { + "target": "runTestPlan.js", + "argumentFormat": "" } }, "messages": { @@ -178,8 +182,8 @@ "MultipleMatchingGradlewFound": "ms-resource:loc.messages.MultipleMatchingGradlewFound" }, "_buildConfigMapping": { - "Default": "0.250.10", + "Default": "0.252.8", "LocalPackages": "0.249.4", - "Node20-225": "0.250.11" + "Node20-225": "0.252.9" } } \ No newline at end of file diff --git a/_generated/AzureTestPlanV0/testPlanData.ts b/_generated/AzureTestPlanV0/testPlanData.ts index e16b68ccf635..345b7624c209 100644 --- a/_generated/AzureTestPlanV0/testPlanData.ts +++ b/_generated/AzureTestPlanV0/testPlanData.ts @@ -1,15 +1,12 @@ -import { Console } from "console"; -import tl = require('azure-pipelines-task-lib/task'); +import tl = require('azure-pipelines-task-lib/task'); import apim = require('azure-devops-node-api'); -import { WorkItemDetails, TestCase } from 'azure-devops-node-api/interfaces/TestPlanInterfaces'; +import { TestCase } from 'azure-devops-node-api/interfaces/TestPlanInterfaces'; import { PagedList } from 'azure-devops-node-api/interfaces/common/VSSInterfaces'; -import TestPlanInterfaces = require('azure-devops-node-api/interfaces/TestPlanInterfaces'); -import { RunCreateModel, TestRun, ShallowReference, TestPlan, TestCaseResult, TestResultCreateModel, TestCaseMetadata2, TestCaseReference2 } from 'azure-devops-node-api/interfaces/TestInterfaces'; -import VSSInterfaces = require('azure-devops-node-api/interfaces/common/VSSInterfaces'); -import constants = require('./constants'); -import { ITestResultsApi } from "azure-devops-node-api/TestResultsApi"; +import {TestCaseResult} from 'azure-devops-node-api/interfaces/TestInterfaces'; +import constants = require('./Common/constants'); +import { getVstsWepApi } from './Common/ApiHelper'; -const personalAccessTokenRegexp = /^.{76}AZDO.{4}$/; +export const personalAccessTokenRegexp = /^.{76}AZDO.{4}$/; export interface TestPlanData { listOfFQNOfTestCases: string[]; @@ -185,12 +182,9 @@ export async function getTestPlanDataPoints(testPlanInputId: number, testSuitesI export async function getTestCaseListAsync(testPlanId: number, testSuiteId: number, testConfigurationId: string, continuationToken: string): Promise> { - let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); - let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); - let projectId = tl.getVariable('System.TeamProjectId'); - let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); - let vsts: apim.WebApi = new apim.WebApi(url, auth); + let vsts: apim.WebApi = await getVstsWepApi(); let testPlanApi = await vsts.getTestPlanApi(); + let projectId = tl.getVariable('System.TeamProjectId'); tl.debug("Fetching test case list for test plan:" + testPlanId + " ,test suite id:" + testSuiteId + " ,test configuration id:" + testConfigurationId); @@ -202,89 +196,6 @@ export async function getTestCaseListAsync(testPlanId: number, testSuiteId: numb testConfigurationId, null, continuationToken) - -} - -export async function createManualTestRun(testPlanInfo: TestPlanData): Promise { - - const manualTestRunResponse: ManualTestRunData = { testRunId: 0, runUrl: "" }; - - const testRunRequestBody = prepareRunModel(testPlanInfo); - - try { - - let projectId = tl.getVariable('System.TeamProjectId'); - var testResultsApi = await getTestResultApiClient(); - - let testRunResponse = await createManualTestRunAsync(testResultsApi, testRunRequestBody, projectId); - console.log("Test run created with id: ", testRunResponse.id); - - let testResultsResponse = await createManualTestResultsAsync(testResultsApi, testPlanInfo.listOfManualTestPoints, projectId, testRunResponse.id); - console.log("Test results created for run id: ", testResultsResponse[0].testRun); - - manualTestRunResponse.testRunId = testRunResponse.id; - manualTestRunResponse.runUrl = testRunResponse.webAccessUrl; - } - - catch(error) { - tl.error("Error while creating manual test run :" + error); - tl.setResult(tl.TaskResult.Failed, tl.loc('ErrorFailTaskOnCreateRunFailure')); - } - - return manualTestRunResponse; } -export function prepareRunModel(testPlanInfo: TestPlanData): RunCreateModel{ - - // some create run params may change on based of requirement - let buildId = tl.getVariable('Build.BuildId'); - let testPointIds: number[] = testPlanInfo.listOfManualTestPoints.map(testPoint => parseInt(testPoint.testPoint.id)); - let testPlanId = testPlanInfo.testPlanId; - let testConfigurationId = testPlanInfo.testConfigurationId; - - const currentUtcTime = new Date().toUTCString(); - console.log("date:...", currentUtcTime); - - const testRunRequestBody: RunCreateModel = { - automated: false, - name: 'Manual test run', - plan: { id: testPlanId.toString() }, - configurationIds: [testConfigurationId], - pointIds: testPointIds, - build: { id: buildId }, - iteration: "manual" - }; - - return testRunRequestBody; -} - -export async function createManualTestResultsAsync(testResultsApi:ITestResultsApi, testResultsRequest: TestCaseResult[], projectId, testRunId): Promise { - return testResultsApi.addTestResultsToTestRun( - testResultsRequest, - projectId, - testRunId) - -} - -export async function createManualTestRunAsync(testResultsApi:ITestResultsApi, testRunRequest: RunCreateModel, projectId): Promise { - - tl.debug("Creating manual test run"); - - return testResultsApi.createTestRun( - testRunRequest, - projectId) - -} - -export async function getTestResultApiClient(){ - let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); - let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); - - let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); - let vsts: apim.WebApi = new apim.WebApi(url, auth); - let testResultsApi = await vsts.getTestResultsApi(); - - console.log("Test result api client created"); - return testResultsApi; -} diff --git a/_generated/AzureTestPlanV0/utils.ts b/_generated/AzureTestPlanV0/utils.ts deleted file mode 100644 index 64a56007222b..000000000000 --- a/_generated/AzureTestPlanV0/utils.ts +++ /dev/null @@ -1,56 +0,0 @@ -export function removeParenthesesFromEnd(inputString) { - // Check if the string ends with parentheses - if (inputString.endsWith("()")) { - // Remove the parentheses from the end - return inputString.slice(0, -2); - } else { - // If no parentheses at the end, return the original string - return inputString; - } -} - -export function replaceLastDotWithHash(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWithHash = inputString.slice(0, lastDotIndex) + '#' + inputString.slice(lastDotIndex + 1); - return stringWithHash; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} - -export function separateGoPath(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWith = inputString.slice(0, lastDotIndex); - return stringWith; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} -export function separateGoTestName(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWith = inputString.slice(lastDotIndex + 1); - return stringWith; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} - -export function separateJestTestName(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const testName = inputString.slice(lastDotIndex + 1); - return testName; - } else { - return inputString; - } -} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/GradleTestExecutor.ts b/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/GradleTestExecutor.ts new file mode 100644 index 000000000000..14aead6ef654 --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/GradleTestExecutor.ts @@ -0,0 +1,133 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { removeParenthesesFromEnd, replaceLastDotWithHash } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class GradleTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.GRADLE_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + gradlewFilePath: string; + + /* + * Setup the test executor + */ + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + this.gradlewFilePath = tl.getInput('gradleFilePath'); + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('-v'); + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error in Gradle setup: " + operationResult.errorMessage); + tl.debug("Looking for Gradlew file to install Gradle"); + } + + if(operationResult.returnCode === 1){ + operationResult.returnCode = 0; + operationResult.errorMessage = ''; + + try { + this.toolRunnerPath = tl.which(this.gradlewFilePath, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error while looking for user input Gradlew file: " + operationResult.errorMessage); + tl.debug("Looking for gradlew file in the repository"); + } + } + + if(operationResult.returnCode === 1){ + operationResult.returnCode = 0; + operationResult.errorMessage = ''; + + try { + const gradlewExecFileSearchPattern: string = "**/gradlew"; + let workingDirectory = tl.getVariable('System.DefaultWorkingDirectory'); + let os = tl.getVariable('Agent.OS'); + const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern); + this.toolRunnerPath = gradlewPath[0]; + + if (gradlewPath.length == 0) { + operationResult.returnCode = 1; + operationResult.errorMessage = tl.loc('GradlewNotFound'); + tl.debug("Gradlew file not found in the repository"); + return operationResult; + } + + if (gradlewPath.length > 1) { + tl.warning(tl.loc('MultipleMatchingGradlewFound')); + tl.debug(this.toolRunnerPath); + } + + if (os == 'Windows_NT') { + tl.debug('Append .bat extension name to gradlew script for windows agent'); + this.toolRunnerPath += '.bat'; + } + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + tl.debug("Error while looking for gradlew file in the repository: " + operationResult.errorMessage); + } + + return operationResult; + } + + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + listOfTestsToBeExecuted.forEach(element => { + listOfTestsToBeRan.push(element); + }); + + return operationResult; + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + const args = [] + + args.push('test'); + + for (let testcase of testsToBeExecuted) { + // in some cases found that gradle is including () in test name + testcase = removeParenthesesFromEnd(testcase); + args.push('--tests'); + args.push(testcase); + } + + tl.debug("Executing gradle tests with args :" + args); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/MavenTestExecutor.ts b/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/MavenTestExecutor.ts new file mode 100644 index 000000000000..5ce3cf485421 --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/MavenTestExecutor.ts @@ -0,0 +1,93 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { replaceLastDotWithHash } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class MavenTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.MVN_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + pomFilePath: string; + + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + this.pomFilePath = tl.getInput('pomFilePath'); + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + return operationResult; + } + + + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('-version'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + listOfTestsToBeExecuted.forEach(element => { + listOfTestsToBeRan.push(element); + }); + + return operationResult; + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + const args = [] + const testsToRun =[] + + for (let tests of testsToBeExecuted) { + const modifiedTest = replaceLastDotWithHash(tests); + testsToRun.push(modifiedTest); + } + + if (testsToRun.length > 0) + { + const testsList = testsToRun.join(',') + const dtest = constants.MAVEN_DTEST; + const combinedTestArgs = dtest + testsList; + + args.push('test'); + args.push(combinedTestArgs); + } + + args.push('-ntp'); + + if (this.pomFilePath) { + args.push('-f'); + args.push(this.pomFilePath); + } + + tl.debug("Executing java maven tests with args :" + args); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/PythonTestExecutor.ts b/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/PythonTestExecutor.ts new file mode 100644 index 000000000000..a5f930459220 --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Automated Flow/TestExecutors/PythonTestExecutor.ts @@ -0,0 +1,103 @@ +import { ITestExecutor } from "../../Interface/ITestExecutor"; +import { IOperationResult } from "../../Interface/IOperationResult"; +import { ciDictionary } from "../../Common/ciEventLogger"; +import * as constants from "../../Common/constants"; +import { replaceLastDotWithHash, extractPythonDiscoveredTests, getExecOptions, transformPythonTestStrings } from "../../Common/utils"; +import * as tl from 'azure-pipelines-task-lib/task'; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; +import { SimpleTimer } from "../../Common/SimpleTimer"; + +export class PythonTestExecutor implements ITestExecutor { + testRunnerCLI: string = constants.PYTEST_EXECUTABLE; + toolRunnerPath: string; + toolRunner: ToolRunner; + pomFilePath: string; + + async setup(): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + try { + this.toolRunnerPath = tl.which(this.testRunnerCLI, true); + } catch (error) { + operationResult.returnCode = 1; + operationResult.errorMessage = error.message || String(error); + return operationResult; + } + + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg('--version'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + return operationResult; + } + + async discoverTests(testsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const args: string[] = ['--collect-only', '-q']; + let discoveryResult = { stdout: ''};; + this.toolRunner = tl.tool(this.toolRunnerPath); + this.toolRunner.arg(args); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(getExecOptions(discoveryResult)); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + + if(operationResult.returnCode === 0){ + // Extract discovered tests from stdout + const discoveredTests: string[] = extractPythonDiscoveredTests(discoveryResult.stdout ?? ''); + var testStringtoFQNMap: Map = new Map(); + + for(let test of discoveredTests){ + testStringtoFQNMap.set(transformPythonTestStrings(test), test); + } + + for(let test of testsToBeExecuted){ + if(!testStringtoFQNMap.has(test)){ + tl.debug(`Test ${test} not found in discovered tests`); + } + else{ + listOfTestsToBeRan.push(testStringtoFQNMap.get(test)); + } + } + + // Variables for debug console logs + const testsToBeExecutedString: string = testsToBeExecuted.join(", "); + const testsToRunString: string = listOfTestsToBeRan.join(", "); + + tl.debug(`Tests to executed are: ${testsToBeExecutedString}`); + tl.debug(`Tests to run are: ${testsToRunString}`); + console.log(`Found ${listOfTestsToBeRan.length} tests to run`); + + return operationResult; + } + } + + async executeTests(testsToBeExecuted: string[], ciData: ciDictionary): Promise { + let operationResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constants.AUTOMATED_EXECUTION); + executionTimer.start(); + + this.toolRunner = tl.tool(this.toolRunnerPath); + + tl.debug("Executing python pytest tests with args :" + testsToBeExecuted); + this.toolRunner.arg(testsToBeExecuted); + this.toolRunner.arg('--junitxml=TEST-python-junit.xml'); + + try { + operationResult.returnCode = await this.toolRunner.execAsync(); + } catch (error) { + operationResult.errorMessage = error.message || String(error); + } + executionTimer.stop(ciData); + + return operationResult; + } + + +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/Automated Flow/automatedFlow.ts b/_generated/AzureTestPlanV0_Node20/Automated Flow/automatedFlow.ts new file mode 100644 index 000000000000..7a9c50eb1ed1 --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Automated Flow/automatedFlow.ts @@ -0,0 +1,95 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { IOperationResult } from '../Interface/IOperationResult'; +import { ciDictionary } from '../Common/ciEventLogger'; +import { publishAutomatedTestResult } from '../Common/publishAutomatedTests'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import { TestPlanData } from '../testPlanData'; +import * as constant from '../Common/constants'; +import { ITestExecutor } from '../Interface/ITestExecutor'; +import { MavenTestExecutor } from '../Automated Flow/TestExecutors/MavenTestExecutor'; +import { GradleTestExecutor } from './TestExecutors/GradleTestExecutor'; +import { PythonTestExecutor } from './TestExecutors/PythonTestExecutor'; + +export async function newAutomatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { + let listOfTestsFromTestPlan: string[] = testPlanInfo?.listOfFQNOfTestCases ?? []; + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const testLanguage = tl.getInput('testLanguageInput', true); + let testExecutor: ITestExecutor = getTestExecutor(testLanguage); + let listOfTestsDiscovered: string[] = []; + if (listOfTestsFromTestPlan.length > 0) { + automatedTestInvokerResult = await testExecutor.setup(); + + if (automatedTestInvokerResult.returnCode === 0) { + automatedTestInvokerResult = await testExecutor.discoverTests(listOfTestsFromTestPlan, ciData, listOfTestsDiscovered); + + if (automatedTestInvokerResult.returnCode === 0) { + if (listOfTestsDiscovered.length === 0) { + return handleNoTestsFound(testSelectorInput); + } + + automatedTestInvokerResult = await testExecutor.executeTests(listOfTestsDiscovered, ciData); + if (automatedTestInvokerResult.returnCode === 0) { + automatedTestInvokerResult = await publishResults(testPlanInfo, ciData, automatedTestInvokerResult); + } + } + } + } else { + automatedTestInvokerResult = handleNoTestsFound(testSelectorInput); + } + + return automatedTestInvokerResult; +} + +function getTestExecutor(testLanguage: string): ITestExecutor{ + let testExecutor:ITestExecutor; + switch (testLanguage) { + case 'JavaMaven': + testExecutor = new MavenTestExecutor(); + break; + + case 'JavaGradle': + testExecutor = new GradleTestExecutor(); + break; + + case 'Python': + testExecutor = new PythonTestExecutor(); + break; + + case 'Go': + break; + + case 'Jest': + break; + + default: + console.log('Invalid test Language Input selected.'); + } + return testExecutor; +} + +async function publishResults(testPlanInfo: TestPlanData, ciData: ciDictionary, automatedTestInvokerResult: IOperationResult): Promise { + let publishingTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); + publishingTimer.start(); + + try { + await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + publishingTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +function handleNoTestsFound(testSelectorInput: string): IOperationResult { + if (testSelectorInput === 'automatedTests') { + return { returnCode: 1, errorMessage: tl.loc('ErrorFailTaskOnNoAutomatedTestsFound') }; + } else { + console.log('No automated tests found for given test plan inputs '); + return { returnCode: 0, errorMessage: '' }; + } +} + diff --git a/_generated/AzureTestPlanV0_Node20/Common/ApiHelper.ts b/_generated/AzureTestPlanV0_Node20/Common/ApiHelper.ts new file mode 100644 index 000000000000..6732360f4ddd --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Common/ApiHelper.ts @@ -0,0 +1,48 @@ +import * as tl from 'azure-pipelines-task-lib'; +import { TestPlanData, personalAccessTokenRegexp } from '../testPlanData'; +import { RunCreateModel } from 'azure-devops-node-api/interfaces/TestInterfaces'; +import * as apim from 'azure-devops-node-api'; + + +export async function getVstsWepApi(): Promise { + let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); + let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); + + let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); + let vsts: apim.WebApi = new apim.WebApi(url, auth); + return vsts; +} + +export function prepareRunModel(testPlanInfo: TestPlanData): RunCreateModel { + + // some create run params may change on based of requirement + let buildId = tl.getVariable('Build.BuildId'); + let testPointIds: number[] = testPlanInfo.listOfManualTestPoints.map(testPoint => parseInt(testPoint.testPoint.id)); + let testPlanId = testPlanInfo.testPlanId; + let testConfigurationId = testPlanInfo.testConfigurationId; + + const currentUtcTime = new Date().toUTCString(); + console.log("date:...", currentUtcTime); + + const testRunRequestBody: RunCreateModel = { + automated: false, + name: 'Manual test run', + plan: { id: testPlanId.toString() }, + configurationIds: [testConfigurationId], + pointIds: testPointIds, + build: { id: buildId }, + iteration: "manual" + }; + + return testRunRequestBody; +} + +export async function getTestResultApiClient() { + + let vsts = await getVstsWepApi(); + let testResultsApi = await vsts.getTestResultsApi(); + + console.log("Test result api client created"); + return testResultsApi; +} + diff --git a/_generated/AzureTestPlanV0_Node20/SimpleTimer.ts b/_generated/AzureTestPlanV0_Node20/Common/SimpleTimer.ts similarity index 100% rename from _generated/AzureTestPlanV0_Node20/SimpleTimer.ts rename to _generated/AzureTestPlanV0_Node20/Common/SimpleTimer.ts diff --git a/_generated/AzureTestPlanV0_Node20/ciEventLogger.ts b/_generated/AzureTestPlanV0_Node20/Common/ciEventLogger.ts similarity index 100% rename from _generated/AzureTestPlanV0_Node20/ciEventLogger.ts rename to _generated/AzureTestPlanV0_Node20/Common/ciEventLogger.ts diff --git a/_generated/AzureTestPlanV0_Node20/constants.ts b/_generated/AzureTestPlanV0_Node20/Common/constants.ts similarity index 100% rename from _generated/AzureTestPlanV0_Node20/constants.ts rename to _generated/AzureTestPlanV0_Node20/Common/constants.ts diff --git a/_generated/AzureTestPlanV0_Node20/publishAutomatedTests.ts b/_generated/AzureTestPlanV0_Node20/Common/publishAutomatedTests.ts similarity index 100% rename from _generated/AzureTestPlanV0_Node20/publishAutomatedTests.ts rename to _generated/AzureTestPlanV0_Node20/Common/publishAutomatedTests.ts diff --git a/_generated/AzureTestPlanV0_Node20/Common/utils.ts b/_generated/AzureTestPlanV0_Node20/Common/utils.ts new file mode 100644 index 000000000000..429e0afd7eac --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Common/utils.ts @@ -0,0 +1,119 @@ +import * as tl from 'azure-pipelines-task-lib/task'; +import * as tr from 'azure-pipelines-task-lib/toolrunner'; +import { Writable } from 'stream'; + +export function removeParenthesesFromEnd(inputString) { + // Check if the string ends with parentheses + if (inputString.endsWith("()")) { + // Remove the parentheses from the end + return inputString.slice(0, -2); + } else { + // If no parentheses at the end, return the original string + return inputString; + } +} + +export function replaceLastDotWithHash(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWithHash = inputString.slice(0, lastDotIndex) + '#' + inputString.slice(lastDotIndex + 1); + return stringWithHash; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} + +export function extractPythonDiscoveredTests(output: string): string[] { + var testNames: string[] = []; + var lines: string[] = output.split('\n'); + + for (let i = 0; i < lines.length; i++) { + const line = lines[i].trim(); + if(line && line.includes(".py")){ + testNames.push(line); + } + } + tl.debug("Discovered tests : " + testNames); + return testNames; +} + +export function separateGoPath(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWith = inputString.slice(0, lastDotIndex); + return stringWith; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} +export function separateGoTestName(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const stringWith = inputString.slice(lastDotIndex + 1); + return stringWith; + } else { + // If there is no dot in the string, return the original string + return inputString; + } +} + +export function separateJestTestName(inputString) { + const lastDotIndex = inputString.lastIndexOf('.'); + + if (lastDotIndex !== -1) { + const testName = inputString.slice(lastDotIndex + 1); + return testName; + } else { + return inputString; + } +} + +export function getExecOptions(output?: { stdout: string }): tr.IExecOptions { + const env = process.env; + + const execOptions: tr.IExecOptions = { + env: env, + outStream: output ? new Writable({ + write(chunk, encoding, callback) { + try { + output.stdout += chunk.toString(); + process.stdout.write(chunk); + callback(); + } catch (error) { + callback(error); + } + }, + }) : process.stdout, + }; + + return execOptions; +} + +export function transformPythonTestStrings(automatedTestName: string): string { + // Remove any leading or trailing whitespace + automatedTestName = automatedTestName.trim(); + let updatedAutomatedTestName: string = automatedTestName; + + const index = automatedTestName.indexOf("::"); + if(index !== -1) { + let testFilePath = automatedTestName.substring(0, index); + let testMethod = automatedTestName.substring(index + 2); + + //Check if testfilePath is a python file + if(testFilePath.endsWith(".py")) { + testFilePath = testFilePath.slice(0, -3).replace(/\//g, '.'); + + //Do the same replace with :: to . in testMethod + testMethod = testMethod.replace(/::/g, '.'); + + //Finally generate updatedAutomatedTestName + updatedAutomatedTestName = testFilePath + "." + testMethod; + } + } + return updatedAutomatedTestName; +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/Interface/IOperationResult.ts b/_generated/AzureTestPlanV0_Node20/Interface/IOperationResult.ts new file mode 100644 index 000000000000..49e7209432ef --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Interface/IOperationResult.ts @@ -0,0 +1,4 @@ +export interface IOperationResult { + returnCode : number; + errorMessage?: string; +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/Interface/ITestExecutor.ts b/_generated/AzureTestPlanV0_Node20/Interface/ITestExecutor.ts new file mode 100644 index 000000000000..8a80d78a8637 --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Interface/ITestExecutor.ts @@ -0,0 +1,11 @@ +import { ciDictionary } from "../Common/ciEventLogger"; +import { IOperationResult } from "./IOperationResult"; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner"; + +export interface ITestExecutor { + testRunnerCLI: string; + toolRunner: ToolRunner; + setup(): Promise; + discoverTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary, listOfTestsToBeRan: string[]): Promise; + executeTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary): Promise; +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/Manual Flow/manualTests.ts b/_generated/AzureTestPlanV0_Node20/Manual Flow/manualTests.ts new file mode 100644 index 000000000000..ecc719dcc317 --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/Manual Flow/manualTests.ts @@ -0,0 +1,47 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { TestPlanData, ManualTestRunData } from '../testPlanData'; +import { getTestResultApiClient, prepareRunModel } from '../Common/ApiHelper'; +import { ciDictionary } from '../Common/ciEventLogger'; +import * as constant from '../Common/constants'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import { IOperationResult } from '../Interface/IOperationResult'; +import { TestCaseResult, TestRun } from 'azure-devops-node-api/interfaces/TestInterfaces'; + +export async function manualTestsFlow(testPlanInfo: TestPlanData, ciData: ciDictionary):Promise { + + let simpleTimer = new SimpleTimer(constant.MANUALTESTS_PUBLISHING); + let manualFlowResult: IOperationResult = { returnCode: 0, errorMessage: "" }; + let projectId = tl.getVariable('System.TeamProjectId'); + + simpleTimer.start(); + + try { + const testRunRequestBody = prepareRunModel(testPlanInfo); + const testResultsApi = await getTestResultApiClient(); + + tl.debug(`Creating test run for project Id: ${projectId}`); + const testRunResponse:TestRun = await testResultsApi.createTestRun( + testRunRequestBody, + projectId) + + tl.debug(`Adding ${testPlanInfo.listOfManualTestPoints.length} manual test results to test run id: ${testRunResponse.id}`); + + const testResultsResponse:TestCaseResult[]= await testResultsApi.addTestResultsToTestRun( + testPlanInfo.listOfManualTestPoints, + projectId, + testRunResponse.id); + + console.log("Test run created with id: ", testRunResponse.id); + console.log("Test results created for run id: ", testResultsResponse[0].testRun.id); + console.log('Test run url: ', testRunResponse.url); + } + catch (error) { + manualFlowResult.errorMessage = error.message || String(error); + manualFlowResult.returnCode = 1; + } + finally{ + simpleTimer.stop(ciData); + } + + return manualFlowResult; +} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/Invokers/goinvoker.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/goinvoker.ts similarity index 93% rename from _generated/AzureTestPlanV0_Node20/Invokers/goinvoker.ts rename to _generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/goinvoker.ts index dea1397075cb..7087d156c5d3 100644 --- a/_generated/AzureTestPlanV0_Node20/Invokers/goinvoker.ts +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/goinvoker.ts @@ -1,6 +1,6 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); import tr = require("azure-pipelines-task-lib/toolrunner"); import { executeGoCommand } from '../testLibExecutor'; diff --git a/_generated/AzureTestPlanV0/Invokers/gradleinvoker.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/gradleinvoker.ts similarity index 85% rename from _generated/AzureTestPlanV0/Invokers/gradleinvoker.ts rename to _generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/gradleinvoker.ts index 57ec6614b42a..314b5f3df349 100644 --- a/_generated/AzureTestPlanV0/Invokers/gradleinvoker.ts +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/gradleinvoker.ts @@ -1,7 +1,7 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); -import { execGradleBuild } from '../testLibExecutor'; +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); +import { execGradleBuild } from '../../OldAutomatedFlow/testLibExecutor'; export async function executeGradleTests(testsToBeExecuted: string[], gradleFilePath?: string): Promise { diff --git a/_generated/AzureTestPlanV0/Invokers/jestinvoker.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/jestinvoker.ts similarity index 95% rename from _generated/AzureTestPlanV0/Invokers/jestinvoker.ts rename to _generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/jestinvoker.ts index 753456bc5262..8cccf09b45e0 100644 --- a/_generated/AzureTestPlanV0/Invokers/jestinvoker.ts +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/jestinvoker.ts @@ -1,6 +1,6 @@ import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); import { executeJestCommand } from '../testLibExecutor'; //Jest command like: >set JEST_JUNIT_OUTPUT_NAME=TEST-Jest0-junit.xml diff --git a/Tasks/AzureTestPlanV0/Invokers/maveninvoker.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/maveninvoker.ts similarity index 89% rename from Tasks/AzureTestPlanV0/Invokers/maveninvoker.ts rename to _generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/maveninvoker.ts index 34baa61174a3..05a228b4da58 100644 --- a/Tasks/AzureTestPlanV0/Invokers/maveninvoker.ts +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/maveninvoker.ts @@ -1,8 +1,7 @@ -import { spawn } from '../testexecutor' import tl = require('azure-pipelines-task-lib/task'); -import utils = require('../utils'); -import constants = require('../constants'); -import { execMavenBuild } from '../testLibExecutor'; +import utils = require('../../Common/utils'); +import constants = require('../../Common/constants'); +import { execMavenBuild } from '../../OldAutomatedFlow/testLibExecutor'; export async function executeMavenTests(testsToBeExecuted: string[], pomFilePath?: string):Promise { diff --git a/_generated/AzureTestPlanV0/Invokers/pythoninvoker.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/pythoninvoker.ts similarity index 97% rename from _generated/AzureTestPlanV0/Invokers/pythoninvoker.ts rename to _generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/pythoninvoker.ts index 925cdc3bcbca..e736a0445515 100644 --- a/_generated/AzureTestPlanV0/Invokers/pythoninvoker.ts +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/Invokers/pythoninvoker.ts @@ -1,6 +1,6 @@ -import { spawn, SpawnResult } from '../testexecutor'; +import { spawn, SpawnResult } from '../../OldAutomatedFlow/testexecutor'; import tl = require('azure-pipelines-task-lib/task'); -import constants = require('../constants'); +import constants = require('../../Common/constants'); export async function executePythonTests(testsToBeExecuted: string[]):Promise { // Perform test discovery diff --git a/Tasks/AzureTestPlanV0/automatedTestInvoker.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/automatedTestInvoker.ts similarity index 83% rename from Tasks/AzureTestPlanV0/automatedTestInvoker.ts rename to _generated/AzureTestPlanV0_Node20/OldAutomatedFlow/automatedTestInvoker.ts index 7e5859e8d86b..656a76beb279 100644 --- a/Tasks/AzureTestPlanV0/automatedTestInvoker.ts +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/automatedTestInvoker.ts @@ -1,10 +1,10 @@ import * as tl from 'azure-pipelines-task-lib/task' -import { executePythonTests } from './Invokers/pythoninvoker' -import { executeMavenTests } from './Invokers/maveninvoker' -import { executeGradleTests } from './Invokers/gradleinvoker' -import { ciDictionary } from './ciEventLogger'; -import { executeGoTests } from './Invokers/goinvoker'; -import { executeJestTests } from './Invokers/jestinvoker'; +import { executePythonTests } from '../OldAutomatedFlow/Invokers/pythoninvoker' +import { executeMavenTests } from '../OldAutomatedFlow/Invokers/maveninvoker' +import { executeGradleTests } from '../OldAutomatedFlow/Invokers/gradleinvoker' +import { ciDictionary } from '../Common/ciEventLogger'; +import { executeGoTests } from '../OldAutomatedFlow/Invokers/goinvoker'; +import { executeJestTests } from '../OldAutomatedFlow/Invokers/jestinvoker'; export async function testInvoker(testsToBeExecuted: string[], ciData: ciDictionary): Promise { diff --git a/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/automatedTests.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/automatedTests.ts new file mode 100644 index 000000000000..37feb0ab5ecd --- /dev/null +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/automatedTests.ts @@ -0,0 +1,72 @@ +import tl = require('azure-pipelines-task-lib/task'); +import { testInvoker } from './automatedTestInvoker'; +import { TestPlanData } from '../testPlanData'; +import { publishAutomatedTestResult } from '../Common/publishAutomatedTests'; +import { ciDictionary } from '../Common/ciEventLogger'; +import { SimpleTimer } from '../Common/SimpleTimer'; +import * as constant from '../Common/constants'; +import { IOperationResult } from '../Interface/IOperationResult'; + +export async function automatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { + let listOfTestsToBeExecuted: string[] = testPlanInfo?.listOfFQNOfTestCases ?? []; + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + + if (listOfTestsToBeExecuted !== null && listOfTestsToBeExecuted !== undefined && listOfTestsToBeExecuted.length > 0) { + automatedTestInvokerResult = await executeTests(listOfTestsToBeExecuted, ciData); + + if(!automatedTestInvokerResult.returnCode){ + automatedTestInvokerResult = await publishResults(testPlanInfo, ciData, automatedTestInvokerResult); + } + } else { + automatedTestInvokerResult = handleNoTestsFound(testSelectorInput); + } + + return automatedTestInvokerResult; +} + +async function executeTests(listOfTestsToBeExecuted: string[], ciData: ciDictionary): Promise { + let automatedTestInvokerResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let executionTimer = new SimpleTimer(constant.AUTOMATED_EXECUTION); + + tl.debug('Invoking test execution for tests: ' + listOfTestsToBeExecuted); + executionTimer.start(); + + try { + automatedTestInvokerResult.returnCode = await testInvoker(listOfTestsToBeExecuted, ciData); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + executionTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +async function publishResults(testPlanInfo: TestPlanData, ciData: ciDictionary, automatedTestInvokerResult: IOperationResult): Promise { + let publishingTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); + publishingTimer.start(); + + try { + await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); + } catch (err) { + automatedTestInvokerResult.returnCode = 1; + automatedTestInvokerResult.errorMessage = err.message || String(err); + } + finally{ + publishingTimer.stop(ciData); + } + + return automatedTestInvokerResult; +} + +function handleNoTestsFound(testSelectorInput: string): IOperationResult { + if (testSelectorInput === 'automatedTests') { + return { returnCode: 1, errorMessage: tl.loc('ErrorFailTaskOnNoAutomatedTestsFound') }; + } else { + console.log('No automated tests found for given test plan inputs '); + return { returnCode: 0, errorMessage: '' }; + } +} + diff --git a/_generated/AzureTestPlanV0/testLibExecutor.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/testLibExecutor.ts similarity index 89% rename from _generated/AzureTestPlanV0/testLibExecutor.ts rename to _generated/AzureTestPlanV0_Node20/OldAutomatedFlow/testLibExecutor.ts index 69a8219d2331..22bef3a0b30f 100644 --- a/_generated/AzureTestPlanV0/testLibExecutor.ts +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/testLibExecutor.ts @@ -82,7 +82,7 @@ export async function execMavenBuild(args: string[]): Promise { try { // 1. Check that Maven exists by executing it to retrieve its version. - await mvnGetVersion.exec(); + await mvnGetVersion.execAsync(); // Setup Maven Executable to run list of test runs provided as input var mvnRun = tl.tool(mvnExec); @@ -90,7 +90,7 @@ export async function execMavenBuild(args: string[]): Promise { mvnRun.arg(args); // 3. Run Maven. Compilation or test errors will cause this to fail. - await mvnRun.exec(getExecOptions()); + await mvnRun.execAsync(getExecOptions()); // Maven build succeeded return 0; // Return 0 indicating success @@ -102,22 +102,10 @@ export async function execMavenBuild(args: string[]): Promise { } function getGradlewExec() { - const gradlewExecFileSearchPattern: string[] = ["**/gradlew"]; + const gradlewExecFileSearchPattern: string = "**/gradlew"; let workingDirectory = tl.getVariable('System.DefaultWorkingDirectory'); - - if (tl.getVariable('System.DefaultWorkingDirectory') && (!path.isAbsolute(workingDirectory))) { - workingDirectory = path.join(tl.getVariable('System.DefaultWorkingDirectory'), workingDirectory); - } - - tl.debug(workingDirectory); - - const findOptions = { - allowBrokenSymbolicLinks: true, - followSpecifiedSymbolicLink: true, - followSymbolicLinks: true - }; - - const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern, findOptions); + let os = tl.getVariable('Agent.OS'); + const gradlewPath = tl.findMatch(workingDirectory, gradlewExecFileSearchPattern); if (gradlewPath.length == 0) { tl.setResult(tl.TaskResult.Failed, "Missing gradlew file"); @@ -131,8 +119,8 @@ function getGradlewExec() { tl.debug(gradlewExec); } - if (isWindows) { - tl.debug('Append .bat extension name to gradlew script.'); + if (os == 'Windows_NT') { + tl.debug('Append .bat extension name to gradlew script for windows agent'); gradlewExec += '.bat'; } diff --git a/_generated/AzureTestPlanV0/testexecutor.ts b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/testexecutor.ts similarity index 81% rename from _generated/AzureTestPlanV0/testexecutor.ts rename to _generated/AzureTestPlanV0_Node20/OldAutomatedFlow/testexecutor.ts index 38061d4b9899..6849796915d5 100644 --- a/_generated/AzureTestPlanV0/testexecutor.ts +++ b/_generated/AzureTestPlanV0_Node20/OldAutomatedFlow/testexecutor.ts @@ -1,8 +1,4 @@ -import * as path from 'path'; -import * as fs from 'fs'; -import * as semver from "semver" import { spawnSync } from 'child_process' -import tl = require('azure-pipelines-task-lib/task'); export async function spawn(executable: string, args: string[]): Promise { diff --git a/_generated/AzureTestPlanV0_Node20/automatedTests.ts b/_generated/AzureTestPlanV0_Node20/automatedTests.ts deleted file mode 100644 index e049d1593b90..000000000000 --- a/_generated/AzureTestPlanV0_Node20/automatedTests.ts +++ /dev/null @@ -1,48 +0,0 @@ -import tl = require('azure-pipelines-task-lib/task'); -import { testInvoker } from './automatedTestInvoker'; -import { TestPlanData } from './testPlanData'; -import { publishAutomatedTestResult } from './publishAutomatedTests'; -import { ciDictionary } from './ciEventLogger'; -import { SimpleTimer } from './SimpleTimer'; -import * as constant from './constants'; - -export async function automatedTestsFlow(testPlanInfo: TestPlanData, testSelectorInput: string, ciData: ciDictionary): Promise { - let listOfTestsToBeExecuted: string[] = testPlanInfo.listOfFQNOfTestCases; - let testInvokerStatusCode = 0; - - if (listOfTestsToBeExecuted !== null && listOfTestsToBeExecuted !== undefined && listOfTestsToBeExecuted.length > 0) { - tl.debug('Invoking test execution for tests: ' + listOfTestsToBeExecuted); - - var simpleTimer = new SimpleTimer(constant.AUTOMATED_EXECUTION); - simpleTimer.start(); - try { - testInvokerStatusCode = await testInvoker(listOfTestsToBeExecuted, ciData); - } catch (err) { - tl.debug(`Unable to invoke automated test execution. Err:( ${err} )`); - testInvokerStatusCode = 1; - } - simpleTimer.stop(ciData); - - simpleTimer = new SimpleTimer(constant.AUTOMATED_PUBLISHING); - simpleTimer.start(); - try { - await publishAutomatedTestResult(JSON.stringify(testPlanInfo.listOfAutomatedTestPoints)); - } catch (err) { - tl.error(`Error while publishing automated Test Results with err : ( ${err} )`); - testInvokerStatusCode = 1; - } - simpleTimer.stop(ciData); - - tl.debug(`Execution Status Code for test Invoker: ${testInvokerStatusCode}`); - return testInvokerStatusCode; - } else { - console.log('No automated tests found for given test plan inputs '); - if (testSelectorInput === 'automatedTests') { - tl.setResult(tl.TaskResult.Failed, tl.loc('ErrorFailTaskOnNoAutomatedTestsFound')); - return 1; - } else { - tl.setResult(tl.TaskResult.Succeeded, 'Successfully triggered manual test execution'); - return 0; - } - } -} diff --git a/_generated/AzureTestPlanV0_Node20/manualTests.ts b/_generated/AzureTestPlanV0_Node20/manualTests.ts deleted file mode 100644 index b55904291ddd..000000000000 --- a/_generated/AzureTestPlanV0_Node20/manualTests.ts +++ /dev/null @@ -1,27 +0,0 @@ -import tl = require('azure-pipelines-task-lib/task'); -import { TestPlanData, createManualTestRun, ManualTestRunData } from './testPlanData'; -import { ciDictionary } from './ciEventLogger'; -import * as constant from './constants'; -import { SimpleTimer } from './SimpleTimer'; - -export async function manualTestsFlow(testPlanInfo: TestPlanData, ciData: ciDictionary):Promise { - - let manualTestRun: ManualTestRunData = { testRunId: 0, runUrl: "" }; - - let simpleTimer = new SimpleTimer(constant.MANUALTESTS_PUBLISHING); - - simpleTimer.start(); - try{ - manualTestRun = await createManualTestRun(testPlanInfo); - } - catch (err){ - tl.debug(`Unable to create Manual Test Run. Err:( ${err} )`); - return 1; - } - simpleTimer.stop(ciData); - - console.log('Test run id created: ', manualTestRun.testRunId); - console.log('Test run url: ', manualTestRun.runUrl); - - return 0; -} \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/runTestPlan.ts b/_generated/AzureTestPlanV0_Node20/runTestPlan.ts index 1f4e89b5876a..d6aa570e120a 100644 --- a/_generated/AzureTestPlanV0_Node20/runTestPlan.ts +++ b/_generated/AzureTestPlanV0_Node20/runTestPlan.ts @@ -1,48 +1,72 @@ import * as tl from 'azure-pipelines-task-lib/task'; -import { manualTestsFlow } from './manualTests' +import { manualTestsFlow } from './Manual Flow/manualTests' import { getTestPlanData, TestPlanData } from './testPlanData' -import { automatedTestsFlow } from './automatedTests' -import { publishEvent, ciDictionary } from './ciEventLogger'; +import { automatedTestsFlow } from './OldAutomatedFlow/automatedTests' +import { publishEvent, ciDictionary } from './Common/ciEventLogger'; +import { IOperationResult } from './Interface/IOperationResult'; +import { newAutomatedTestsFlow } from './Automated Flow/automatedFlow'; + +function setupCiData(testSelectorInput: string, testPlanInfo: TestPlanData) { + let ciData: ciDictionary = { + TestSelector: testSelectorInput, + totalNumOfManualTestPoint: testPlanInfo.listOfManualTestPoints.length, + totalNumOfAutomatedTestPoint: testPlanInfo.listOfAutomatedTestPoints.length, + totalNumOfTestSuites: testPlanInfo.testSuiteIds.length + } + + return ciData; +} export async function run() { const testSelectorInput = tl.getInput('testSelector'); console.log('Test Selector selected : ' + testSelectorInput); - var ciData: ciDictionary = { - TestSelector: testSelectorInput, - totalNumOfManualTestPoint: 0, - totalNumOfAutomatedTestPoint: 0, - totalNumOfTestSuites: 0 + let testPlanInfo: TestPlanData; + try { + testPlanInfo = await getTestPlanData(); + } catch (err) { + tl.setResult(tl.TaskResult.Failed, `Error in fetching test plan data: ${err}`); + return 1; } - const testPlanInfo = await getTestPlanData(); + let ciData: ciDictionary = setupCiData(testSelectorInput, testPlanInfo); - ciData.totalNumOfAutomatedTestPoint = testPlanInfo.listOfAutomatedTestPoints.length; - ciData.totalNumOfManualTestPoint = testPlanInfo.listOfManualTestPoints.length; - ciData.totalNumOfTestSuites = testPlanInfo.testSuiteIds.length; - - let manualTestFlowReturnCode = 0; - let automatedTestFlowReturnCode = 0; + let manualFlowResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + let automatedFlowResult: IOperationResult = { returnCode: 0, errorMessage: '' }; + const myEnvVar = tl.getVariable('Use_NewAutomatedFlow'); + tl.debug(`The value of Use_NewAutomatedFlow is: ${myEnvVar}`); // trigger manual, automated or both tests based on user's input if (testSelectorInput.includes('manualTests')) { - manualTestFlowReturnCode = await manualTestsFlow(testPlanInfo, ciData); - tl.debug(`Execution Status Code for Manual Test Flow is ${manualTestFlowReturnCode}`); - ciData["manualTestFlowReturnCode"] = manualTestFlowReturnCode; + manualFlowResult = await manualTestsFlow(testPlanInfo, ciData); + tl.debug(`Execution Status Code for Manual Test Flow is ${manualFlowResult.returnCode}`); + + if(manualFlowResult.returnCode){ + tl.debug(`Error in Manual Test Flow: ${manualFlowResult.errorMessage}`); + } + ciData["manualTestFlowReturnCode"] = manualFlowResult.returnCode; } if (testSelectorInput.includes('automatedTests')) { - automatedTestFlowReturnCode = await automatedTestsFlow(testPlanInfo, testSelectorInput, ciData); - tl.debug(`Execution Status Code for Automated Test Flow is ${automatedTestFlowReturnCode}`); - ciData["automatedTestFlowReturnCode"] = automatedTestFlowReturnCode; + if(myEnvVar){ + automatedFlowResult = await newAutomatedTestsFlow(testPlanInfo, testSelectorInput, ciData); + tl.debug(`Execution Status Code for Automated Test Flow is ${automatedFlowResult.returnCode}`); + ciData["automatedTestFlowReturnCode"] = automatedFlowResult.returnCode; + } + else{ + automatedFlowResult = await automatedTestsFlow(testPlanInfo, testSelectorInput, ciData); + tl.debug(`Execution Status Code for Automated Test Flow is ${automatedFlowResult.returnCode}`); + ciData["automatedTestFlowReturnCode"] = automatedFlowResult.returnCode; + + } } - if( manualTestFlowReturnCode || automatedTestFlowReturnCode){ + if( manualFlowResult.returnCode || automatedFlowResult.returnCode){ tl.setResult(tl.TaskResult.Failed, "Faced error in execution."); } publishEvent(ciData); } -run(); +run(); \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/task.json b/_generated/AzureTestPlanV0_Node20/task.json index 13e3e8baf552..b19affdfd0a5 100644 --- a/_generated/AzureTestPlanV0_Node20/task.json +++ b/_generated/AzureTestPlanV0_Node20/task.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 250, - "Patch": 11 + "Minor": 252, + "Patch": 9 }, "preview": true, "demands": [], @@ -182,8 +182,8 @@ "MultipleMatchingGradlewFound": "Multiple gradlew files found. Selecting the first matched instance" }, "_buildConfigMapping": { - "Default": "0.250.10", + "Default": "0.252.8", "LocalPackages": "0.249.4", - "Node20-225": "0.250.11" + "Node20-225": "0.252.9" } } \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/task.loc.json b/_generated/AzureTestPlanV0_Node20/task.loc.json index 11a40de2039c..6fe2d0ce93e5 100644 --- a/_generated/AzureTestPlanV0_Node20/task.loc.json +++ b/_generated/AzureTestPlanV0_Node20/task.loc.json @@ -13,8 +13,8 @@ "author": "Microsoft Corporation", "version": { "Major": 0, - "Minor": 250, - "Patch": 11 + "Minor": 252, + "Patch": 9 }, "preview": true, "demands": [], @@ -182,8 +182,8 @@ "MultipleMatchingGradlewFound": "ms-resource:loc.messages.MultipleMatchingGradlewFound" }, "_buildConfigMapping": { - "Default": "0.250.10", + "Default": "0.252.8", "LocalPackages": "0.249.4", - "Node20-225": "0.250.11" + "Node20-225": "0.252.9" } } \ No newline at end of file diff --git a/_generated/AzureTestPlanV0_Node20/testPlanData.ts b/_generated/AzureTestPlanV0_Node20/testPlanData.ts index e16b68ccf635..345b7624c209 100644 --- a/_generated/AzureTestPlanV0_Node20/testPlanData.ts +++ b/_generated/AzureTestPlanV0_Node20/testPlanData.ts @@ -1,15 +1,12 @@ -import { Console } from "console"; -import tl = require('azure-pipelines-task-lib/task'); +import tl = require('azure-pipelines-task-lib/task'); import apim = require('azure-devops-node-api'); -import { WorkItemDetails, TestCase } from 'azure-devops-node-api/interfaces/TestPlanInterfaces'; +import { TestCase } from 'azure-devops-node-api/interfaces/TestPlanInterfaces'; import { PagedList } from 'azure-devops-node-api/interfaces/common/VSSInterfaces'; -import TestPlanInterfaces = require('azure-devops-node-api/interfaces/TestPlanInterfaces'); -import { RunCreateModel, TestRun, ShallowReference, TestPlan, TestCaseResult, TestResultCreateModel, TestCaseMetadata2, TestCaseReference2 } from 'azure-devops-node-api/interfaces/TestInterfaces'; -import VSSInterfaces = require('azure-devops-node-api/interfaces/common/VSSInterfaces'); -import constants = require('./constants'); -import { ITestResultsApi } from "azure-devops-node-api/TestResultsApi"; +import {TestCaseResult} from 'azure-devops-node-api/interfaces/TestInterfaces'; +import constants = require('./Common/constants'); +import { getVstsWepApi } from './Common/ApiHelper'; -const personalAccessTokenRegexp = /^.{76}AZDO.{4}$/; +export const personalAccessTokenRegexp = /^.{76}AZDO.{4}$/; export interface TestPlanData { listOfFQNOfTestCases: string[]; @@ -185,12 +182,9 @@ export async function getTestPlanDataPoints(testPlanInputId: number, testSuitesI export async function getTestCaseListAsync(testPlanId: number, testSuiteId: number, testConfigurationId: string, continuationToken: string): Promise> { - let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); - let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); - let projectId = tl.getVariable('System.TeamProjectId'); - let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); - let vsts: apim.WebApi = new apim.WebApi(url, auth); + let vsts: apim.WebApi = await getVstsWepApi(); let testPlanApi = await vsts.getTestPlanApi(); + let projectId = tl.getVariable('System.TeamProjectId'); tl.debug("Fetching test case list for test plan:" + testPlanId + " ,test suite id:" + testSuiteId + " ,test configuration id:" + testConfigurationId); @@ -202,89 +196,6 @@ export async function getTestCaseListAsync(testPlanId: number, testSuiteId: numb testConfigurationId, null, continuationToken) - -} - -export async function createManualTestRun(testPlanInfo: TestPlanData): Promise { - - const manualTestRunResponse: ManualTestRunData = { testRunId: 0, runUrl: "" }; - - const testRunRequestBody = prepareRunModel(testPlanInfo); - - try { - - let projectId = tl.getVariable('System.TeamProjectId'); - var testResultsApi = await getTestResultApiClient(); - - let testRunResponse = await createManualTestRunAsync(testResultsApi, testRunRequestBody, projectId); - console.log("Test run created with id: ", testRunResponse.id); - - let testResultsResponse = await createManualTestResultsAsync(testResultsApi, testPlanInfo.listOfManualTestPoints, projectId, testRunResponse.id); - console.log("Test results created for run id: ", testResultsResponse[0].testRun); - - manualTestRunResponse.testRunId = testRunResponse.id; - manualTestRunResponse.runUrl = testRunResponse.webAccessUrl; - } - - catch(error) { - tl.error("Error while creating manual test run :" + error); - tl.setResult(tl.TaskResult.Failed, tl.loc('ErrorFailTaskOnCreateRunFailure')); - } - - return manualTestRunResponse; } -export function prepareRunModel(testPlanInfo: TestPlanData): RunCreateModel{ - - // some create run params may change on based of requirement - let buildId = tl.getVariable('Build.BuildId'); - let testPointIds: number[] = testPlanInfo.listOfManualTestPoints.map(testPoint => parseInt(testPoint.testPoint.id)); - let testPlanId = testPlanInfo.testPlanId; - let testConfigurationId = testPlanInfo.testConfigurationId; - - const currentUtcTime = new Date().toUTCString(); - console.log("date:...", currentUtcTime); - - const testRunRequestBody: RunCreateModel = { - automated: false, - name: 'Manual test run', - plan: { id: testPlanId.toString() }, - configurationIds: [testConfigurationId], - pointIds: testPointIds, - build: { id: buildId }, - iteration: "manual" - }; - - return testRunRequestBody; -} - -export async function createManualTestResultsAsync(testResultsApi:ITestResultsApi, testResultsRequest: TestCaseResult[], projectId, testRunId): Promise { - return testResultsApi.addTestResultsToTestRun( - testResultsRequest, - projectId, - testRunId) - -} - -export async function createManualTestRunAsync(testResultsApi:ITestResultsApi, testRunRequest: RunCreateModel, projectId): Promise { - - tl.debug("Creating manual test run"); - - return testResultsApi.createTestRun( - testRunRequest, - projectId) - -} - -export async function getTestResultApiClient(){ - let url = tl.getEndpointUrl('SYSTEMVSSCONNECTION', false); - let token = tl.getEndpointAuthorizationParameter('SYSTEMVSSCONNECTION', 'ACCESSTOKEN', false); - - let auth = (token.length == 52 || personalAccessTokenRegexp.test(token)) ? apim.getPersonalAccessTokenHandler(token) : apim.getBearerHandler(token); - let vsts: apim.WebApi = new apim.WebApi(url, auth); - let testResultsApi = await vsts.getTestResultsApi(); - - console.log("Test result api client created"); - return testResultsApi; -} diff --git a/_generated/AzureTestPlanV0_Node20/utils.ts b/_generated/AzureTestPlanV0_Node20/utils.ts deleted file mode 100644 index 64a56007222b..000000000000 --- a/_generated/AzureTestPlanV0_Node20/utils.ts +++ /dev/null @@ -1,56 +0,0 @@ -export function removeParenthesesFromEnd(inputString) { - // Check if the string ends with parentheses - if (inputString.endsWith("()")) { - // Remove the parentheses from the end - return inputString.slice(0, -2); - } else { - // If no parentheses at the end, return the original string - return inputString; - } -} - -export function replaceLastDotWithHash(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWithHash = inputString.slice(0, lastDotIndex) + '#' + inputString.slice(lastDotIndex + 1); - return stringWithHash; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} - -export function separateGoPath(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWith = inputString.slice(0, lastDotIndex); - return stringWith; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} -export function separateGoTestName(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const stringWith = inputString.slice(lastDotIndex + 1); - return stringWith; - } else { - // If there is no dot in the string, return the original string - return inputString; - } -} - -export function separateJestTestName(inputString) { - const lastDotIndex = inputString.lastIndexOf('.'); - - if (lastDotIndex !== -1) { - const testName = inputString.slice(lastDotIndex + 1); - return testName; - } else { - return inputString; - } -} \ No newline at end of file