From cc30d215a6d415f17cfc98fde9afe4fa62c6df2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Jare=C5=A1?= <58428711+pj892031@users.noreply.github.com> Date: Wed, 27 Nov 2024 21:09:03 +0100 Subject: [PATCH] chore: Replace request dependency to fix security issue in the node enabler (#3909) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Pavel Jareš Signed-off-by: nx673747 Signed-off-by: ac892247 Co-authored-by: nx673747 Co-authored-by: ac892247 --- .github/workflows/integration-tests.yml | 1 + .gitignore | 5 +- .../cypress/e2e/login/login-oauth2.cy.js | 3 +- gradle/versions.gradle | 4 +- .../package-lock.json | 24 +- .../package.json | 1 + .../src/index.js | 8 +- onboarding-enabler-nodejs/.babelrc | 3 + onboarding-enabler-nodejs/.eslintrc | 10 + onboarding-enabler-nodejs/.npmrc | 2 +- onboarding-enabler-nodejs/gulpfile.babel.js | 64 + .../license-checker-config.json | 16 + onboarding-enabler-nodejs/package-lock.json | 8316 ++++++++++++++++- onboarding-enabler-nodejs/package.json | 40 +- onboarding-enabler-nodejs/src/AwsMetadata.js | 122 + .../src/ConfigClusterResolver.js | 87 + .../src/DnsClusterResolver.js | 164 + onboarding-enabler-nodejs/src/EurekaClient.js | 698 ++ onboarding-enabler-nodejs/src/Logger.js | 81 + .../src/defaultConfig.js | 57 + onboarding-enabler-nodejs/src/deltaUtils.js | 51 + onboarding-enabler-nodejs/src/index.js | 70 +- .../test/AwsMetadata.test.js | 180 + .../test/ConfigClusterResolver.test.js | 220 + .../test/DnsClusterResolver.test.js | 358 + .../test/EurekaClient.test.js | 1407 +++ onboarding-enabler-nodejs/test/Logger.test.js | 123 + .../test/deltaUtil.test.js | 73 + .../test/eureka-client-test.yml | 3 + .../test/eureka-client.yml | 11 + .../test/fixtures/config.yml | 2 + .../test/fixtures/malformed-config.yml | 3 + .../test/integration.test.js | 102 + 33 files changed, 11915 insertions(+), 394 deletions(-) create mode 100644 onboarding-enabler-nodejs/.babelrc create mode 100644 onboarding-enabler-nodejs/.eslintrc create mode 100644 onboarding-enabler-nodejs/gulpfile.babel.js create mode 100644 onboarding-enabler-nodejs/license-checker-config.json create mode 100644 onboarding-enabler-nodejs/src/AwsMetadata.js create mode 100644 onboarding-enabler-nodejs/src/ConfigClusterResolver.js create mode 100644 onboarding-enabler-nodejs/src/DnsClusterResolver.js create mode 100644 onboarding-enabler-nodejs/src/EurekaClient.js create mode 100644 onboarding-enabler-nodejs/src/Logger.js create mode 100644 onboarding-enabler-nodejs/src/defaultConfig.js create mode 100644 onboarding-enabler-nodejs/src/deltaUtils.js create mode 100644 onboarding-enabler-nodejs/test/AwsMetadata.test.js create mode 100644 onboarding-enabler-nodejs/test/ConfigClusterResolver.test.js create mode 100644 onboarding-enabler-nodejs/test/DnsClusterResolver.test.js create mode 100644 onboarding-enabler-nodejs/test/EurekaClient.test.js create mode 100644 onboarding-enabler-nodejs/test/Logger.test.js create mode 100644 onboarding-enabler-nodejs/test/deltaUtil.test.js create mode 100644 onboarding-enabler-nodejs/test/eureka-client-test.yml create mode 100644 onboarding-enabler-nodejs/test/eureka-client.yml create mode 100644 onboarding-enabler-nodejs/test/fixtures/config.yml create mode 100644 onboarding-enabler-nodejs/test/fixtures/malformed-config.yml create mode 100644 onboarding-enabler-nodejs/test/integration.test.js diff --git a/.github/workflows/integration-tests.yml b/.github/workflows/integration-tests.yml index f95880a4a3..93325c9df2 100644 --- a/.github/workflows/integration-tests.yml +++ b/.github/workflows/integration-tests.yml @@ -1380,6 +1380,7 @@ jobs: - /api-defs:/api-defs env: APIML_SERVICE_HOSTNAME: discovery-service-2 + APIML_DISCOVERY_ALLPEERSURLS: https://discovery-service-2:10011/eureka gateway-service-2: image: ghcr.io/balhar-jakub/gateway-service:${{ github.run_id }}-${{ github.run_number }} env: diff --git a/.gitignore b/.gitignore index 4d6603d695..6b78c22a95 100644 --- a/.gitignore +++ b/.gitignore @@ -110,10 +110,11 @@ invalidated*.index onboarding-enabler-micronaut/target/ onboarding-enabler-micronaut/out/ onboarding-enabler-nodejs-sample-app/tools/ - +onboarding-enabler-nodejs/coverage/ +onboarding-enabler-nodejs/lib/ file/ zowe-cli-id-federation-plugin/*.jcl data/* -index/* \ No newline at end of file +index/* diff --git a/api-catalog-ui/frontend/cypress/e2e/login/login-oauth2.cy.js b/api-catalog-ui/frontend/cypress/e2e/login/login-oauth2.cy.js index 4a84eca90c..05f1b8f2bb 100644 --- a/api-catalog-ui/frontend/cypress/e2e/login/login-oauth2.cy.js +++ b/api-catalog-ui/frontend/cypress/e2e/login/login-oauth2.cy.js @@ -26,13 +26,12 @@ describe('>>> Login through Okta OK', () => { cy.log("System env CYPRESS_OKTA_PASSWORD is not set"); } - cy.get('form span.o-form-input-name-identifier input').type(username); + cy.get('form span.o-form-input-name-username input').type(username); cy.get('form input[type="password"]').type(password); cy.get('form input.button-primary').should('not.be.disabled'); cy.get('form input.button-primary').click(); - cy.location('href').should('contain', '/oauth2/v1/authorize') cy.url().should('contain', '/application'); diff --git a/gradle/versions.gradle b/gradle/versions.gradle index d85d76001e..214fcc6730 100644 --- a/gradle/versions.gradle +++ b/gradle/versions.gradle @@ -67,12 +67,12 @@ dependencyResolutionManagement { version('log4j', '2.24.1') version('lombok', '1.18.34') version('netty', '4.1.115.Final') - version('nettyReactor', '1.2.0') + version('nettyReactor', '1.1.23') version('nimbusJoseJwt', '9.46') version('openApiDiff', '2.0.1') version('picocli', '4.7.6') - version('reactor', '3.7.0') + version('reactor', '3.6.11') version('restAssured', '5.5.0') version('rhino', '1.7.15') version('springDoc', '2.6.0') diff --git a/onboarding-enabler-nodejs-sample-app/package-lock.json b/onboarding-enabler-nodejs-sample-app/package-lock.json index 56dc7f9981..a311980a1c 100644 --- a/onboarding-enabler-nodejs-sample-app/package-lock.json +++ b/onboarding-enabler-nodejs-sample-app/package-lock.json @@ -19,13 +19,31 @@ }, "../onboarding-enabler-nodejs": { "name": "@zowe/apiml-onboarding-enabler-nodejs", - "version": "3.0.38", + "version": "3.0.43", "license": "EPL-2.0", "dependencies": { - "eureka-js-client": "4.5.0" + "async": "3.2.6", + "js-yaml": "4.1.0", + "lodash": "4.17.21" }, "devDependencies": { - "js-yaml": "4.1.0" + "babel-core": "6.26.3", + "babel-istanbul": "0.12.2", + "babel-preset-env": "1.7.0", + "chai": "5.1.2", + "coveralls": "3.1.1", + "eslint": "^2.13.1", + "eslint-config-airbnb-base": "^3.0.1", + "eslint-plugin-import": "^1.16.0", + "gulp": "5.0.0", + "gulp-babel": "^7.0.0", + "gulp-env": "0.4.0", + "gulp-eslint": "6.0.0", + "gulp-istanbul": "1.1.3", + "gulp-mocha": "10.0.1", + "nock": "13.5.6", + "sinon": "19.0.2", + "sinon-chai": "4.0.0" }, "engines": { "node": "=20.18.0", diff --git a/onboarding-enabler-nodejs-sample-app/package.json b/onboarding-enabler-nodejs-sample-app/package.json index dc29b6d7a1..bd802b0b03 100755 --- a/onboarding-enabler-nodejs-sample-app/package.json +++ b/onboarding-enabler-nodejs-sample-app/package.json @@ -2,6 +2,7 @@ "name": "helloworld-expressjs", "version": "0.3.0", "description": "Hello World Service in Express", + "type": "module", "main": "src/index.js", "scripts": { "start": "node src/index.js", diff --git a/onboarding-enabler-nodejs-sample-app/src/index.js b/onboarding-enabler-nodejs-sample-app/src/index.js index 774b23ad15..f29bb9ef73 100755 --- a/onboarding-enabler-nodejs-sample-app/src/index.js +++ b/onboarding-enabler-nodejs-sample-app/src/index.js @@ -8,9 +8,9 @@ * Copyright Contributors to the Zowe Project. */ -const express = require("express"); -const https = require("https"); -const apiLayerService = require("@zowe/apiml-onboarding-enabler-nodejs"); +import express from "express"; +import * as https from "https"; +import * as apiLayerService from "@zowe/apiml-onboarding-enabler-nodejs"; // Command-line arguments: const args = { @@ -54,7 +54,7 @@ function startHttpsService() { app.use(express.static("src/static")); // Start HTTPS server and register to Discovery Service: - tlsOptions = apiLayerService.tlsOptions; + const tlsOptions = apiLayerService.tlsOptions; httpsServer = https.createServer(tlsOptions, app); httpsServer.listen(args.port, function () { console.log(`${args.serviceId} service listening on port ${args.port}`); diff --git a/onboarding-enabler-nodejs/.babelrc b/onboarding-enabler-nodejs/.babelrc new file mode 100644 index 0000000000..002b4aa0d5 --- /dev/null +++ b/onboarding-enabler-nodejs/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": ["env"] +} diff --git a/onboarding-enabler-nodejs/.eslintrc b/onboarding-enabler-nodejs/.eslintrc new file mode 100644 index 0000000000..acf9653adc --- /dev/null +++ b/onboarding-enabler-nodejs/.eslintrc @@ -0,0 +1,10 @@ +{ + "extends": ["airbnb-base"], + "rules": { + "no-param-reassign": [2, {"props": false}], + "consistent-return": 0 + }, + "env": { + "mocha": true + } +} diff --git a/onboarding-enabler-nodejs/.npmrc b/onboarding-enabler-nodejs/.npmrc index c06a38e8c8..59c413d08e 100644 --- a/onboarding-enabler-nodejs/.npmrc +++ b/onboarding-enabler-nodejs/.npmrc @@ -1,2 +1,2 @@ legacy-peer-deps=true -registry=https://zowe.jfrog.io/artifactory/api/npm/npm-org/ +registry=https://zowe.jfrog.io/artifactory/api/npm/npm-org diff --git a/onboarding-enabler-nodejs/gulpfile.babel.js b/onboarding-enabler-nodejs/gulpfile.babel.js new file mode 100644 index 0000000000..133f3ece05 --- /dev/null +++ b/onboarding-enabler-nodejs/gulpfile.babel.js @@ -0,0 +1,64 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +import gulp from 'gulp'; +import babel from 'gulp-babel'; +import mocha from 'gulp-mocha'; +import eslint from 'gulp-eslint'; +import { Instrumenter } from 'babel-istanbul'; +import istanbul from 'gulp-istanbul'; +import env from 'gulp-env'; + +gulp.task('build', () => ( + gulp.src('src/**/*.js') + .pipe(babel()) + .pipe(gulp.dest('lib')) +)); + +gulp.task('lint', () => ( + gulp.src(['src/**/*.js', 'test/**/*.js']) + .pipe(eslint()) + .pipe(eslint.format()) + .pipe(eslint.failOnError()) +)); + +gulp.task('mocha', (cb) => { + const envs = env.set({ + NODE_ENV: 'test', + }); + + return gulp.src('src/**/*.js') + .pipe(envs) + .pipe(istanbul({ + instrumenter: Instrumenter, + })) // Covering files + .pipe(istanbul.hookRequire()) // Force `require` to return covered files + .on('finish', () => { + gulp.src(['test/**/*.js', '!test/integration.test.js']) + .pipe(mocha()) + .pipe(istanbul.writeReports()) + .pipe(istanbul.enforceThresholds({ thresholds: { global: 0 } })) + .pipe(envs.reset) + .on('end', cb); + }); +}); + +gulp.task('test:integration', () => ( + gulp.src('test/integration.test.js') + .pipe(mocha({ timeout: 120000 })) +)); + +gulp.task('test', gulp.series('lint', 'mocha')); + +gulp.task('test:watch', () => ( + gulp.watch(['src/**/*.js', 'test/**/*.test.js'], ['test']) +)); + +gulp.task('default', gulp.series('build')); diff --git a/onboarding-enabler-nodejs/license-checker-config.json b/onboarding-enabler-nodejs/license-checker-config.json new file mode 100644 index 0000000000..ede2e40b04 --- /dev/null +++ b/onboarding-enabler-nodejs/license-checker-config.json @@ -0,0 +1,16 @@ +{ + "license": "../.licence/EPL-2.0-licence-header.txt", + "licenseFormats": { + "ts|js": { + "prepend": "/*", + "append": " */\n", + "eachLine": { + "prepend": " * " + } + } + }, + "ignore": [ + "bin", "lib", "coverage", + ".*", "*.md", "*.gradle", "**/*.yml" + ] +} diff --git a/onboarding-enabler-nodejs/package-lock.json b/onboarding-enabler-nodejs/package-lock.json index 425d2f7915..a04e4178f8 100644 --- a/onboarding-enabler-nodejs/package-lock.json +++ b/onboarding-enabler-nodejs/package-lock.json @@ -9,37 +9,397 @@ "version": "3.0.43", "license": "EPL-2.0", "dependencies": { - "eureka-js-client": "4.5.0" + "async": "3.2.6", + "js-yaml": "4.1.0", + "lodash": "4.17.21" }, "devDependencies": { - "js-yaml": "4.1.0" + "babel-core": "6.26.3", + "babel-istanbul": "0.12.2", + "babel-preset-env": "1.7.0", + "chai": "5.1.2", + "coveralls": "3.1.1", + "eslint": "^2.13.1", + "eslint-config-airbnb-base": "^3.0.1", + "eslint-plugin-import": "^1.16.0", + "gulp": "5.0.0", + "gulp-babel": "^7.0.0", + "gulp-env": "0.4.0", + "gulp-eslint": "6.0.0", + "gulp-istanbul": "1.1.3", + "gulp-mocha": "10.0.1", + "nock": "13.5.6", + "sinon": "19.0.2", + "sinon-chai": "4.0.0" }, "engines": { "node": "=20.18.0", "npm": "=10.9.0" } }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@sinonjs/samsam/-/samsam-8.0.2.tgz", + "integrity": "sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "lodash.get": "^4.4.2", + "type-detect": "^4.1.0" + } + }, + "node_modules/@sinonjs/samsam/node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@types/expect": { + "version": "1.20.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@types/expect/-/expect-1.20.4.tgz", + "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.9.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@types/node/-/node-22.9.1.tgz", + "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.8" + } + }, + "node_modules/@types/vinyl": { + "version": "2.0.12", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/@types/vinyl/-/vinyl-2.0.12.tgz", + "integrity": "sha512-Sr2fYMBUVGYq8kj3UthXFAu5UN6ZW+rYr4NACjZQJvHvj+c8lYv0CahmZ2P/r7iUkN44gGUBwqxZkrKXYPb7cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/expect": "^1.20.4", + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.0.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/abbrev/-/abbrev-1.0.9.tgz", + "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "dev": true, + "license": "ISC" + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "1.5.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", + "integrity": "sha512-vuBv+fm2s6cqUyey2A7qYcvsik+GMDJsw8BARP2sDE76cqmaZVarsvHf7Vx6VJ0Xk8gLl+u3MoAPf6gKzJefeA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": ">=4.10.0" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "license": "BSD-3-Clause OR MIT", + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-cyan": { + "version": "0.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-red": { + "version": "0.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "license": "Python-2.0" + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": "~2.1.0" } @@ -48,128 +408,411 @@ "version": "1.0.0", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/async": { - "version": "2.6.4", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "version": "3.2.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-done": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/async-settle": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", + "dev": true, + "license": "MIT", "dependencies": { - "lodash": "^4.17.14" + "async-done": "^2.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, + "license": "MIT" }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "license": "Apache-2.0", "engines": { "node": "*" } }, "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" + "version": "1.13.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true, + "license": "MIT" }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "license": "MIT", "dependencies": { - "tweetnacl": "^0.14.3" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" } }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==" + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true, + "license": "MIT" }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/babel-core": { + "version": "6.26.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" } }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" + "node_modules/babel-core/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true, + "license": "MIT" }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "node_modules/babel-core/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" + "ms": "2.0.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" + "node_modules/babel-core/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "node_modules/babel-core/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-generator": { + "version": "6.26.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "license": "MIT", "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "node_modules/babel-generator/node_modules/jsesc": { + "version": "1.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==", + "dev": true, + "license": "MIT", "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "jsesc": "bin/jsesc" } }, - "node_modules/eureka-js-client": { - "version": "4.5.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eureka-js-client/-/eureka-js-client-4.5.0.tgz", - "integrity": "sha512-vnkrw7UPAHdJbTsjpgVJfqjr3FFJnEJNq4acRbc6s8qTAhO0LhTDkN4a/1TUYlsr480x0PWjA6jzqVGCjyWE7g==", + "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha512-gCtfYORSG1fUMX4kKraymq607FWgMWg+j42IFPc18kFQEsmtaibP4UrqsXt8FlEJle25HUd4tsoDR7H2wDhe9Q==", + "dev": true, + "license": "MIT", "dependencies": { - "async": "^2.0.1", - "js-yaml": "^3.3.1", - "lodash": "^4.13.1", - "request": "^2.83.0" + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, - "node_modules/eureka-js-client/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha512-RL8n2NiEj+kKztlrVJM9JT1cXzzAdvWFh76xh/H1I4nKwunzE4INBXn8ieCZ+wh4zWszZk7NBS1s/8HR5jDkzQ==", + "dev": true, + "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" } }, - "node_modules/eureka-js-client/node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha512-bHkmjcC9lM1kmZcVpA5t2om2nzT/xiZpo6TJq7UlZ3wqKfzia4veeXbIhKvJXAMzhhEBd3cR1IElL5AenWEUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha512-qe5csbhbvq6ccry9G7tkXbzNtcDiH4r51rrPUbwwoTzZ18AqxWYRZT6AOmxrpxKnQBW0pYlBI/8vh73Z//78nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha512-Oo6+e2iX+o9eVvJ9Y5eKL5iryeRdsIkwRYheCuhYdVHsdEQysbc2z2QkqCLIYnNxkT5Ss3ggrHdXiDI7Dhrn4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha512-WfgKFX6swFB1jS2vo+DwivRN4NB8XUdM3ij0Y1gnC21y1tdBoe6xjVnd7NSI6alv+gZXCtJqvrTeMW3fR/c0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha512-zAYl3tqerLItvG5cKYw7f1SpvIxS9zi7ohyGHaI9cgDUjAT6YcY9jIEH5CstetP5wHIVSceXwNS7Z5BpJg+rOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha512-Op9IhEaxhbRT8MDXx2iNuMgciu2V8lDvYCNQbDGjdBNCjaMvyLf4wl4A3b8IgndCyQF8TwfgsQ8T3VD8aX1/pA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha512-VlPiWmqmGJp0x0oK27Out1D+71nVVCTSdlbhIVoaBAj2lUgrNjBCRR9+llO4lTSb2O4r7PJg+RobRkhBrf6ofg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha512-RYqaPD0mQyQIFRu7Ho5wE2yvA/5jxqCIj/Lv4BXNq23mHYu/vxikOy2JueLiBxQknwapwrJeNCesvY0ZcfnlHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha512-sLI+u7sXJh6+ToqDr57Bv973kCepItDhMou0xCP2YPVmR1jkHSCY+p1no8xErbV1Siz5QE8qKT1WIwybSWlqjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-helpers": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-istanbul": { + "version": "0.12.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-istanbul/-/babel-istanbul-0.12.2.tgz", + "integrity": "sha512-w/RnZoR+a5keVyy/0fn/596YHujYdfcoVZZElVh+P4yu5Tq8bwzOX+uDuV9WIfBfTpGj6cPHXJrcD881aY5RSA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "multi-glob": "^1.0.1", + "nopt": "3.x", + "object-assign": "^4.0.1", + "once": "1.x", + "resolve": "^1.1.0", + "source-map": "0.4.x", + "supports-color": "3.1.x", + "which": "1.2.x", + "wordwrap": "1.0.x" + }, + "bin": { + "babel-istanbul": "lib/cli.js" + }, + "peerDependencies": { + "babel-core": "6.x.x" + } + }, + "node_modules/babel-istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/babel-istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-istanbul/node_modules/js-yaml": { + "version": "3.14.1", "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -178,343 +821,7346 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "node_modules/babel-istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "engines": [ - "node >=0.6.0" - ] + "node_modules/babel-istanbul/node_modules/source-map": { + "version": "0.4.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "node_modules/babel-messages": { + "version": "6.23.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + "node_modules/babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha512-B1M5KBP29248dViEo1owyY32lk1ZSH2DaNNrXLGt8lyjjHm7pBqAdQ7VKUPR6EEDO323+OvT3MQXbCin8ooWdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "engines": { - "node": "*" + "node_modules/babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha512-4Zp4unmHgw30A1eWI5EpACji2qMocisdXhAftfhXoSV9j0Tvj6nRFE3tOmRY912E0FMRm/L5xWE7MGVT2FoLnw==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha512-Z/flU+T9ta0aIEKl1tGEmN/pZiI1uXmCiGFRegKacQfEJzp7iNsKloZmyJlQr+75FCJtiFfGIK03SiCvCt9cPQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha512-Gx9CH3Q/3GKbhs07Bszw5fPTlU+ygrOGfAhEt7W2JICwufpC4SuO0mG0+4NykPBSYPMJhqvVlDBU17qB1D+hMQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha512-7BgYJujNCg0Ti3x0c/DL3tStvnKS6ktIYOmo9wginv/dfZOrbSZ+qG4IRRHMBOzZ5Awb1skTiAsQXg/+IWkZYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" } }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "node_modules/babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha512-PCqwwzODXW7JMrzu+yZIaYbPQSKjDTAsNNlK2l5Gg9g4rz2VzLnZsStvp/3c46GfXpwkyufb3NCyG9+50FF1Vg==", + "dev": true, + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" + "babel-runtime": "^6.22.0" } }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha512-2+ujAT2UMBzYFm7tidUsYh+ZoIutxJ3pN9IYrF1/H6dCKtECfhmB8UkHVpyxDwkj0CYbQG35ykoz925TUnBc3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha512-YiN6sFAQ5lML8JjCmr7uerS5Yc/EMbgg9G8ZNmk2E3nYX4ckHR01wrkeeMijEf5WHNK5TW0Sl0Uu3pv3EdOJWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha512-5Dy7ZbRinGrNtmWpquZKZ3EGY8sDgIVB4CU8Om8q8tnMLrD/m94cKglVcHps0BCTdZ0TJeeAWOq2TK9MIY6cag==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha512-C/uAv4ktFP/Hmh01gMTvYvICrKze0XVX9f2PdIXuriCSvUmV9j+u+BB9f5fJK3+878yMK6dkdcq+Ymr9mrcLzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha512-aNv/GDAW0j/f4Uy1OEPZn1mqD+Nfy9viFGBfQ5bZyT35YqOiqx7/tXdyfZkJ1sC21NyEsBdfDY6PYmLHF4r5iA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha512-ossocTuPOssfxO2h+Z3/Ea1Vo1wWx31Uqy9vIiJusOP4TbF7tPs9U0sJ9pX9OJPf4lXRGj5+6Gkl/HHKiAP5ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha512-DLuRwoygCoXx+YfxHLkVx5/NpeSbVwfoTeBykpJK7JhYWlL/O8hgAK/reforUnZDlxasOrVPPJVI/guE3dCwkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha512-iFp5KIcorf11iBqu/y/a7DK3MN5di3pNCzto61FqCNnUX4qeBwcV1SLqe10oXNnCaxBUImX3SckX2/o1nsrTcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha512-tjFl0cwMPpDYyoqYA9li1/7mGFit39XiNX5DKC/uCNjBctMxyL1/PT/l4rSlbvBG1pOKI88STRdUsWXB3/Q9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha512-LnIIdGWIKdw7zwckqx+eGjcS8/cl8D74A3BpJbGjKTFFNJSMrjN4bIh22HY1AlkUbeLG6X6OZj56BDvWD+OeFA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha512-ONFIPsq8y4bls5PPsAWYXH/21Hqv64TBxdje0FvU3MhIV6QM2j5YS7KvAzg/nTIVLot2D2fmFQrFWCbgHlFEjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha512-LpVbiT9CLsuAIp3IG0tfbVo81QIhn6pE8xBJ7XSeCtFlMltuar5VuBV6y6Q45tpui9QWcy5i0vLQfCfrnF7Kiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha512-8G5hpZMecb53vpD3mjs64NhI1au24TAmokQ4B+TBFBjN9cVoGoOvotdrMMRmHvVZUEvqGUPWL514woru1ChZMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha512-8HxlW+BB5HqniD+nLkQ4xSAVq3bR/pcYW9IigY+2y0dI+Y7INFeTbfAQr+63T3E4UDsZGjyb+l9txUnABWxlOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha512-mDdocSfUVm1/7Jw/FIRNw9vPrBQNePy6wZJlR8HAUBLybNp1w/6lr6zZ2pjMShee65t/ybR5pT8ulkLzD1xwiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha512-3Ghhi26r4l3d0Js933E5+IhHwk0A1yiutj9gwvzmFbVV0sPMYk2lekhOufHBswX7NCoSeF4Xrl3sCIuSIa+zOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha512-CYP359ADryTo3pCsH0oxRo/0yn6UsEZLqYohHmvLQdfS9xkf+MbCzE3/Kolw9OYIY4ZMilH25z/5CbQbwDD+lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha512-x8b9W0ngnKzDMHimVtTfn5ryimars1ByTqsfBDwAqLibmuuQY6pgBQi5z1ErIsUOWBdw1bW9FSz5RZUojM4apg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha512-fz6J2Sf4gYN6gWgRZaoFXmq93X+Li/8vf+fb0sGDVtdeWvxC9y5/bTD7bvfWMEq6zetGEHpWjtzRGSugt5kNqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha512-v61Dbbihf5XxnYjtBN04B/JBvsScY37R1cZT5r9permN1cp+b70DY3Ib3fIkgn1DI9U3tGgBJZVD8p/mE/4JbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "node_modules/babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha512-LzXDmbMkklvNhprr20//RStKVcT8Cu+SQtX18eMHLhjHf2yFzwtQ0S2f0jQ+89rokoNdmwoSqYzAhq86FxlLSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "node_modules/babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha512-LS+dBkUGlNR15/5WHKe/8Neawx663qttS6AGqoOUhICc9d1KciBvtrQSuc0PI+CxQ2Q/S1aKuJ+u64GtLdcEZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerator-transform": "^0.10.0" + } + }, + "node_modules/babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha512-j3KtSpjyLSJxNoCDrhwiJad8kw0gJ9REGj8/CqL0HeRyLnvUNYV9zcqluL6QJSXh3nfsLEmSLvwRfGzrgR96Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "node_modules/babel-preset-env": { + "version": "1.7.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + } + }, + "node_modules/babel-preset-env/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/babel-register": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-template": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "node_modules/babel-traverse/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/babel-traverse/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-types": { + "version": "6.26.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "node_modules/babylon": { + "version": "6.18.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true, + "license": "MIT", + "bin": { + "babylon": "bin/babylon.js" + } + }, + "node_modules/bach": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "dev": true, + "license": "Apache-2.0", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "3.2.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + }, + "bin": { + "browserslist": "cli.js" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caller-path": { + "version": "0.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/caller-path/node_modules/callsites": { + "version": "0.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001683", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", + "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/chai": { + "version": "5.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true, + "license": "MIT" + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/contains-path": { + "version": "0.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha512-OKZnPGeMQy2RPaUIBPFFd71iNf4791H12MCRuVQDnzGRwCYNYmTDy5pdafo2SLAcEMKzTOQnLWG4QdcjeJUMEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-props": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "each-props": "^3.0.0", + "is-plain-object": "^5.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/coveralls": { + "version": "3.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/coveralls/-/coveralls-3.1.1.tgz", + "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" + }, + "bin": { + "coveralls": "bin/coveralls.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/coveralls/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/coveralls/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/coveralls/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/dargs": { + "version": "8.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/dargs/-/dargs-8.1.0.tgz", + "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-indent": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/each-props": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/easy-transform-stream": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/easy-transform-stream/-/easy-transform-stream-1.0.1.tgz", + "integrity": "sha512-ktkaa6XR7COAR3oj02CF3IOgz2m1hCaY3SfzvKT4Svt2MhHw9XCt+ncJNWfe2TGz31iqzNGZ8spdKQflj+Rlog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.63", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/electron-to-chromium/-/electron-to-chromium-1.5.63.tgz", + "integrity": "sha512-ddeXKuY9BHo/mw145axlyWjlJ1UBt4WK3AlvkT7W2AbqfRQoacVoRUCF6wL3uIx/8wT9oLKXzI+rFqHHscByaA==", + "dev": true, + "license": "ISC" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-map": { + "version": "0.1.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha512-mz3UqCh0uPCIqsw1SSAkB/p0rOzF/M0V++vyN7JqlPtSW/VsYgQBvVvqMLmfBuyMzTpLnNqi6JmcSizs4jy19A==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "node_modules/es6-set": { + "version": "0.1.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "1.8.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=0.12.0" + }, + "optionalDependencies": { + "source-map": "~0.2.0" + } + }, + "node_modules/escodegen/node_modules/source-map": { + "version": "0.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", + "dev": true, + "optional": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escope": { + "version": "3.6.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/escope/-/escope-3.6.0.tgz", + "integrity": "sha512-75IUQsusDdalQEW/G/2esa87J7raqdJF+Ca0/Xm5C3Q58Nr4yVYjZGp/P1+2xiEVgXRrA39dpRb8LcshajbqDQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/escope/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "2.13.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eslint/-/eslint-2.13.1.tgz", + "integrity": "sha512-29PFGeV6lLQrPaPHeCkjfgLRQPFflDiicoNZOw+c/JkaQ0Am55yUICdYZbmCiM+DSef+q7oCercimHvjNI0GAw==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^1.1.3", + "concat-stream": "^1.4.6", + "debug": "^2.1.1", + "doctrine": "^1.2.2", + "es6-map": "^0.1.3", + "escope": "^3.6.0", + "espree": "^3.1.6", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^1.1.1", + "glob": "^7.0.3", + "globals": "^9.2.0", + "ignore": "^3.1.2", + "imurmurhash": "^0.1.4", + "inquirer": "^0.12.0", + "is-my-json-valid": "^2.10.0", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.5.1", + "json-stable-stringify": "^1.0.0", + "levn": "^0.3.0", + "lodash": "^4.0.0", + "mkdirp": "^0.5.0", + "optionator": "^0.8.1", + "path-is-absolute": "^1.0.0", + "path-is-inside": "^1.0.1", + "pluralize": "^1.2.1", + "progress": "^1.1.8", + "require-uncached": "^1.0.2", + "shelljs": "^0.6.0", + "strip-json-comments": "~1.0.1", + "table": "^3.7.8", + "text-table": "~0.2.0", + "user-home": "^2.0.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "3.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-3.0.1.tgz", + "integrity": "sha512-71Gd90ksJRHhGrFv7A9TwgvpOGeHooJFpvDoaOaIPkypToIGXyOeiMwWxrj8LNyT6wOHqZCMalMmM0Eo7t2V9Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "eslint": "^2.9.0", + "eslint-plugin-import": "^1.7.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.2.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz", + "integrity": "sha512-HI8ShtDIy7gON76Nr3bu4zl0DuCLPo1Fud9P2lltOQKeiAS2r5/o/l3y+V8HJ1cDLFSz+tHu7/V9fI5jirwlbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.2.0", + "object-assign": "^4.0.1", + "resolve": "^1.1.6" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import": { + "version": "1.16.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eslint-plugin-import/-/eslint-plugin-import-1.16.0.tgz", + "integrity": "sha512-69zk4fLTFIV4nUaZQfdXyDjSIuymcc4y7ZMywQSnmySpy6MlvDCduug7+G0e6FJMOvEvNC/1N5xDbZvZQphm1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^1.1.1", + "contains-path": "^0.1.0", + "debug": "^2.2.0", + "doctrine": "1.3.x", + "es6-map": "^0.1.3", + "es6-set": "^0.1.4", + "eslint-import-resolver-node": "^0.2.0", + "has": "^1.0.1", + "lodash.cond": "^4.3.0", + "lodash.endswith": "^4.0.1", + "lodash.find": "^4.3.0", + "lodash.findindex": "^4.3.0", + "minimatch": "^3.0.3", + "object-assign": "^4.0.1", + "pkg-dir": "^1.0.0", + "pkg-up": "^1.0.0" + }, + "peerDependencies": { + "eslint": "2.x - 3.x" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "1.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/doctrine/-/doctrine-1.3.0.tgz", + "integrity": "sha512-gqlQGGVCLvUma+7NOGN/fTE5EDHZSUlXORXJX26hRMFudoAP0W0Zot3NP0FTN6BTo1FpQaRBO2p3U0kq/Veifw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/ajv": { + "version": "4.11.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha512-I/bSHSNEcFFqXLf91nchoNB9D1Kie3QKcWdchYUaoIg1+1bdWDkdfdlvdIOJbi9U8xR0y+MWc5D+won9v95WlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" + } + }, + "node_modules/eslint/node_modules/ansi-escapes": { + "version": "1.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", + "integrity": "sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/eslint/node_modules/cli-cursor": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/cli-cursor/-/cli-cursor-1.0.2.tgz", + "integrity": "sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true, + "license": "ISC" + }, + "node_modules/eslint/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/eslint/node_modules/doctrine": { + "version": "1.5.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha512-lsGyRuYr4/PIB0txi+Fy2xOMI2dGaTguCaotzFGkVZuKR5usKfcRWIFKNM3QNrU7hh/+w2bwTW+ZeXPK5l8uVg==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/figures": { + "version": "1.7.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/inquirer": { + "version": "0.12.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/inquirer/-/inquirer-0.12.0.tgz", + "integrity": "sha512-bOetEz5+/WpgaW4D1NYOk1aD+JCqRjqu/FwRFgnIfiP7FC/zinsrfyO1vlS3nyH/R7S0IH3BIHBu4DBIDSqiGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^1.1.0", + "ansi-regex": "^2.0.0", + "chalk": "^1.0.0", + "cli-cursor": "^1.0.1", + "cli-width": "^2.0.0", + "figures": "^1.3.5", + "lodash": "^4.3.0", + "readline2": "^1.0.1", + "run-async": "^0.1.0", + "rx-lite": "^3.1.2", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.0", + "through": "^2.3.6" + } + }, + "node_modules/eslint/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/onetime": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/onetime/-/onetime-1.1.0.tgz", + "integrity": "sha512-GZ+g4jayMqzCRMgB2sol7GiCLjKfS1PINkjmx8spcKce1LiVqcbQreXwqs2YAFXC6R03VIG28ZS31t8M866v6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/progress": { + "version": "1.1.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/progress/-/progress-1.1.8.tgz", + "integrity": "sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint/node_modules/restore-cursor": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/restore-cursor/-/restore-cursor-1.0.1.tgz", + "integrity": "sha512-reSjH4HuiFlxlaBaFCiS6O76ZGG2ygKoSlCsipKdaZuKSPx/+bt9mULkn4l0asVzbEfQQmXRg6Wp6gv6m0wElw==", + "dev": true, + "license": "MIT", + "dependencies": { + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/run-async": { + "version": "0.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/run-async/-/run-async-0.1.0.tgz", + "integrity": "sha512-qOX+w+IxFgpUpJfkv2oGN0+ExPs68F4sZHfaRRx4dDexAQkG83atugKVEylyT5ARees3HBbfmuvnjbrd8j9Wjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.3.0" + } + }, + "node_modules/eslint/node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "1.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-json-comments/-/strip-json-comments-1.0.4.tgz", + "integrity": "sha512-AOPG8EBc5wAikaG1/7uFCNFJwnKOuQwFTpYBdTW6OvWHeZBQBrAA/amefHGrEiOnCPcLFZK6FUPtWVKpQVIRgg==", + "dev": true, + "license": "MIT", + "bin": { + "strip-json-comments": "cli.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint/node_modules/table": { + "version": "3.8.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/table/-/table-3.8.3.tgz", + "integrity": "sha512-RZuzIOtzFbprLCE0AXhkI0Xi42ZJLZhCC+qkwuMLf/Vjz3maWpA8gz1qMdbmNoI9cOROT2Am/DxeRyXenrL11g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^4.7.0", + "ajv-keywords": "^1.0.0", + "chalk": "^1.1.1", + "lodash": "^4.0.0", + "slice-ansi": "0.0.4", + "string-width": "^2.0.0" + } + }, + "node_modules/eslint/node_modules/table/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/table/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/table/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/espree": { + "version": "3.5.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/acorn-jsx": { + "version": "3.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^3.0.4" + } + }, + "node_modules/espree/node_modules/acorn-jsx/node_modules/acorn": { + "version": "3.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esprima": { + "version": "2.7.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "1.9.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit-hook": { + "version": "1.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/exit-hook/-/exit-hook-1.1.1.tgz", + "integrity": "sha512-MsG3prOVw1WtLXAZbM3KiYtooKR1LvxHh3VHsVtIy0uiUu8usxgB/94DP2HxtD/661lLdB6yzQ09lGJSQr6nkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "1.3.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/file-entry-cache/-/file-entry-cache-1.3.1.tgz", + "integrity": "sha512-JyVk7P0Hvw6uEAwH4Y0j+rZMvaMWvLBYRmRGAF2S6jKTycf0mMDcC7d21Y2KyrKJk3XI8YghSsk5KmRdbvg0VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/fined": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/flagged-respawn": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "1.3.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flat-cache/node_modules/write": { + "version": "0.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/write/-/write-0.2.1.tgz", + "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/generate-object-property": { + "version": "1.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/generate-object-property/-/generate-object-property-1.2.0.tgz", + "integrity": "sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-property": "^1.0.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "5.0.15", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob/-/glob-5.0.15.tgz", + "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-stream": { + "version": "8.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-watcher": { + "version": "6.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-done": "^2.0.0", + "chokidar": "^3.5.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/globals": { + "version": "9.18.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glogg": { + "version": "2.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", + "dev": true, + "license": "MIT", + "dependencies": { + "sparkles": "^2.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/gulp": { + "version": "5.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulp/-/gulp-5.0.0.tgz", + "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.0.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp-babel": { + "version": "7.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulp-babel/-/gulp-babel-7.0.1.tgz", + "integrity": "sha512-UqHS3AdxZyJCRxqnAX603Dj3k/Wx6hzcgmav3QcxvsIFq3Y8ZkU7iXd0O+JwD5ivqCc6o0r1S7tCB/xxLnuSNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "plugin-error": "^1.0.1", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "babel-core": "6 || 7 || ^7.0.0-alpha || ^7.0.0-beta || ^7.0.0-rc" + } + }, + "node_modules/gulp-cli": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/gulp-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/gulp-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-env": { + "version": "0.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulp-env/-/gulp-env-0.4.0.tgz", + "integrity": "sha512-zSPvvkU5Cn+UWMkNlrCNDwrCazNfmlvQsDPmv0mxt3r78cln2Ja19iYPXAByDenkyi3t0dzwbGkMdGvE5tQnrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "through2": "^2.0.0" + } + }, + "node_modules/gulp-eslint": { + "version": "6.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulp-eslint/-/gulp-eslint-6.0.0.tgz", + "integrity": "sha512-dCVPSh1sA+UVhn7JSQt7KEb4An2sQNbOdB3PA8UCfxsoPlAKjJHxYHGXdXC7eb+V1FAnilSFFqslPrq037l1ig==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint": "^6.0.0", + "fancy-log": "^1.3.2", + "plugin-error": "^1.0.1" + } + }, + "node_modules/gulp-eslint/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/gulp-eslint/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/gulp-eslint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/gulp-eslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/gulp-eslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/gulp-eslint/node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/gulp-eslint/node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/gulp-eslint/node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/gulp-eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/gulp-eslint/node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gulp-eslint/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/gulp-eslint/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/gulp-eslint/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true, + "license": "ISC" + }, + "node_modules/gulp-eslint/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gulp-eslint/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gulp-eslint/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gulp-eslint/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/gulp-eslint/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-eslint/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-eslint/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/gulp-eslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/gulp-eslint/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/gulp-istanbul": { + "version": "1.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulp-istanbul/-/gulp-istanbul-1.1.3.tgz", + "integrity": "sha512-uMLSdqPDnBAV/B9rNyOgVMgrVC1tPbe+5GH6P13UOyxbRDT/w4sKYHWftPMA8j9om+NFvfeRlqpDXL2fixFWNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul": "^0.4.0", + "istanbul-threshold-checker": "^0.2.1", + "lodash": "^4.0.0", + "plugin-error": "^0.1.2", + "through2": "^2.0.0", + "vinyl-sourcemaps-apply": "^0.2.1" + } + }, + "node_modules/gulp-istanbul/node_modules/arr-diff": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.0.1", + "array-slice": "^0.2.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-istanbul/node_modules/arr-union": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-istanbul/node_modules/array-slice": { + "version": "0.2.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-istanbul/node_modules/extend-shallow": { + "version": "1.1.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-istanbul/node_modules/plugin-error": { + "version": "0.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-cyan": "^0.1.1", + "ansi-red": "^0.1.1", + "arr-diff": "^1.0.1", + "arr-union": "^2.0.1", + "extend-shallow": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-mocha": { + "version": "10.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulp-mocha/-/gulp-mocha-10.0.1.tgz", + "integrity": "sha512-BGo+sDMXHxNfgxYqc7Vq0W4Na8J1nBwjR91BwrhIHVm0mR6UklWIvNOk8Ql086XBVGbhIQ8u+b1XlSzZoBtLXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dargs": "^8.1.0", + "execa": "^8.0.1", + "gulp-plugin-extras": "^0.3.0", + "mocha": "^10.2.0", + "supports-color": "^9.4.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + }, + "peerDependencies": { + "gulp": ">=4" + }, + "peerDependenciesMeta": { + "gulp": { + "optional": true + } + } + }, + "node_modules/gulp-mocha/node_modules/supports-color": { + "version": "9.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-9.4.0.tgz", + "integrity": "sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/gulp-plugin-extras": { + "version": "0.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulp-plugin-extras/-/gulp-plugin-extras-0.3.0.tgz", + "integrity": "sha512-I/kOBSpo61QsGQZcqozZYEnDseKvpudUafVVWDLYgBFAUJ37kW5R8Sjw9cMYzpGyPUfEYOeoY4p+dkfLqgyJUQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/vinyl": "^2.0.9", + "chalk": "^5.3.0", + "easy-transform-stream": "^1.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gulp-plugin-extras/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/gulplog": { + "version": "2.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "glogg": "^2.2.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/home-or-tmp": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-my-ip-valid": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-my-ip-valid/-/is-my-ip-valid-1.0.1.tgz", + "integrity": "sha512-jxc8cBcOWbNK2i2aTkCZP6i7wkHF1bqKFrwEHuN5Jtg5BSaZHUZQ/JTOJwoV41YvHnOaRyWWh72T/KvfNz9DJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-my-json-valid": { + "version": "2.20.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-my-json-valid/-/is-my-json-valid-2.20.6.tgz", + "integrity": "sha512-1JQwulVNjx8UqkPE/bqDaxtH4PXCe/2VRh/y3p99heOV87HG4Id5/VfDswd+YiAfHcRTfDlWgISycnHuhZq1aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^5.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul": { + "version": "0.4.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/istanbul/-/istanbul-0.4.5.tgz", + "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", + "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "abbrev": "1.0.x", + "async": "1.x", + "escodegen": "1.8.x", + "esprima": "2.7.x", + "glob": "^5.0.15", + "handlebars": "^4.0.1", + "js-yaml": "3.x", + "mkdirp": "0.5.x", + "nopt": "3.x", + "once": "1.x", + "resolve": "1.1.x", + "supports-color": "^3.1.0", + "which": "^1.1.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "istanbul": "lib/cli.js" + } + }, + "node_modules/istanbul-threshold-checker": { + "version": "0.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/istanbul-threshold-checker/-/istanbul-threshold-checker-0.2.1.tgz", + "integrity": "sha512-KBEXIAIr7ANpZHX4qkRvbIV5XYyMXn9hwBjddR/ixG8b/M+K1y8a6h4Ca+3HUn2WUr2WnRryhNeM+KXXJROqww==", + "dev": true, + "license": "MIT", + "dependencies": { + "istanbul": "~0.4.5", + "lodash": "~4.17.2" + } + }, + "node_modules/istanbul/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/istanbul/node_modules/async": { + "version": "1.5.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/async/-/async-1.5.2.tgz", + "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/istanbul/node_modules/js-yaml/node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/istanbul/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify": { + "version": "1.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", + "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "isarray": "^2.0.5", + "jsonify": "^0.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true, + "license": "ISC" + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "license": "Public Domain", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/just-extend": { + "version": "6.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/last-run": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/lcov-parse": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha512-aprLII/vPzuQvYZnDRU78Fns9I2Ag3gi4Ipga/hxnVMCZC8DnR2nI7XBqrPoywGfxqIx/DgarGvDJZAD3YBTgQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "lcov-parse": "bin/cli.js" + } + }, + "node_modules/lead": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/liftoff": { + "version": "5.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/liftoff/-/liftoff-5.0.0.tgz", + "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash.cond": { + "version": "4.5.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash.cond/-/lodash.cond-4.5.2.tgz", + "integrity": "sha512-RWjUhzGbzG/KfDwk+onqdXvrsNv47G9UCMJgSKalPTSqJQyxZhQophG9jgqLf+15TIbZ5a/yG2YKOWsH3dVy9A==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.endswith": { + "version": "4.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash.endswith/-/lodash.endswith-4.2.1.tgz", + "integrity": "sha512-pegckn1D2ohyUKt7OHrp7GpJVNnndjE+FpzULQ0pjQvbjdktdWGmKVth5wdSYWHzQSZA7OSGbIo0/AuwTeX1pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.find": { + "version": "4.6.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash.find/-/lodash.find-4.6.0.tgz", + "integrity": "sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.findindex": { + "version": "4.6.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", + "integrity": "sha512-9er6Ccz6sEST3bHFtUrCFWk14nE8cdL/RoW1RRDV1BxqN3qsmsT56L14jhfctAqhVPVcdJw4MRxEaVoAK+JVvw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-driver": { + "version": "1.2.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=0.8.6" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/multi-glob": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/multi-glob/-/multi-glob-1.0.2.tgz", + "integrity": "sha512-sUBlFqEARG0FhuI7dELtmLmC+vGHz0supHIMntXazUjzV7hV34dK7LXWtpgD/L29tHsWoui91pLD+vjRnk6PVw==", + "deprecated": "No longer maintained", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "5.x" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/mute-stdout": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true, + "license": "ISC" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/nise": { + "version": "6.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/nise/-/nise-6.1.1.tgz", + "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.1", + "@sinonjs/text-encoding": "^0.7.3", + "just-extend": "^6.2.0", + "path-to-regexp": "^8.1.0" + } + }, + "node_modules/nock": { + "version": "13.5.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/nock/-/nock-13.5.6.tgz", + "integrity": "sha512-o2zOYiCpzRqSzPj0Zt/dQ/DqZeYoaQ7TUonc/xUPjCGl9WeHpNbxgVvOquXYAaJzI0M9BXV3HTzG0p8IUAbBTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true, + "license": "(WTFPL OR MIT)" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-to-regexp": { + "version": "8.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-up": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/pkg-up/-/pkg-up-1.0.0.tgz", + "integrity": "sha512-L+d849d9lz20hnRpUnWBRXOh+mAvygQpK7UuXiw+6QbPwL55RVgl+G+V936wCzs/6J7fj0pvgLY9OknZ+FqaNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/plugin-error/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pluralize": { + "version": "1.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/pluralize/-/pluralize-1.2.1.tgz", + "integrity": "sha512-TH+BeeL6Ct98C7as35JbZLf8lgsRzlNJb5gklRIGHKaPkGl1esOKBc5ALUMd+q08Sr6tiEKM+Icbsxg5vuhMKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/private": { + "version": "0.1.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/propagate/-/propagate-2.0.1.tgz", + "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/psl": { + "version": "1.13.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/psl/-/psl-1.13.0.tgz", + "integrity": "sha512-BFwmFXiJoFqlUpZ5Qssolv15DMyc84gTBds1BjsV1BfXEo1UyyD7GsmN67n7J77uRhoSNW1AXtXKPLcBFQn9Aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true, + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readline2": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/readline2/-/readline2-1.0.1.tgz", + "integrity": "sha512-8/td4MmwUB6PkZUbV25uKz7dfrmjYWxsW8DVfibWdlHRk/l/DfHKn4pU+dfcoGLFgWOdyGCzINRQD7jn+Bv+/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "mute-stream": "0.0.5" + } + }, + "node_modules/readline2/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readline2/node_modules/mute-stream": { + "version": "0.0.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mute-stream/-/mute-stream-0.0.5.tgz", + "integrity": "sha512-EbrziT4s8cWPmzr47eYVW3wimS4HsvlnV5ri1xw1aR6JQo/OrJX5rkl32K/QQHdxeabJETtfeaROGhd8W7uBgg==", + "dev": true, + "license": "ISC" + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/regenerator-transform": { + "version": "0.10.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "license": "BSD", + "dependencies": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "node_modules/regexpu-core": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha512-tJ9+S4oKjxY8IZ9jmjnp/mtytu1u3iyIQAfmI51IKWH6bFf7XR1ybtaO6j7INhZKXOTYADk7V5qxaqLkmNxiZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "node_modules/regjsgen": { + "version": "0.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha512-x+Y3yA24uF68m5GA+tBjbGYo64xXVJpbToBaWCoSNSc1hdk6dfctaRWrNFTVJZIIhL5GxW8zwjoixbnifnK59g==", + "dev": true, + "license": "MIT" + }, + "node_modules/regjsparser": { + "version": "0.1.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha512-jlQ9gYLfk2p3V5Ag5fYhA7fv7OHzd1KUH0PRP46xc3TgwjwgROIW572AfYg/X9kaNq/LJnu6oJcFRXlIrGoTRw==", + "dev": true, + "license": "BSD", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "license": "ISC" + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/replace-homedir": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-uncached": { + "version": "1.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-uncached/node_modules/resolve-from": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-options": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "value-or-function": "^4.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rx-lite": { + "version": "3.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/rx-lite/-/rx-lite-3.1.2.tgz", + "integrity": "sha512-1I1+G2gteLB8Tkt8YI1sJvSIfa0lWuRtC8GjvtyPBcLSF5jBCCJJqKrpER5JU5r6Bhe+i9/pK3VMuUcXu0kdwQ==", + "dev": true + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "sver": "^1.8.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.6.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/shelljs/-/shelljs-0.6.1.tgz", + "integrity": "sha512-B1vvzXQlJ77SURr3SIUQ/afh+LwecDKAVKE1wqkBlr2PCHoZDaF6MFD+YX1u9ddQjR4z2CKx1tdqvS2Xfs5h1A==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sinon": { + "version": "19.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/sinon/-/sinon-19.0.2.tgz", + "integrity": "sha512-euuToqM+PjO4UgXeLETsfQiuoyPXlqFezr6YZDFwHR3t4qaX0fZUe1MfPMznTL5f8BWrVS89KduLdMUsxFCO6g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.2", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "nise": "^6.1.1", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon-chai": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/sinon-chai/-/sinon-chai-4.0.0.tgz", + "integrity": "sha512-cWqO7O2I4XfJDWyWElAQ9D/dtdh5Mo0RHndsfiiYyjWnlPzBJdIvjCVURO4EjyYaC3BjV+ISNXCfTXPXTEIEWA==", + "dev": true, + "license": "(BSD-2-Clause OR WTFPL)", + "peerDependencies": { + "chai": "^5.0.0", + "sinon": ">=4.0.0" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "7.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.4.18", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.5.6" + } + }, + "node_modules/sparkles": { + "version": "2.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.13.2" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/streamx": { + "version": "2.20.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/streamx/-/streamx-2.20.2.tgz", + "integrity": "sha512-aDGDLU+j9tJcUdPGOaHmVF1u/hhI+CsGkT02V3OKlHDV7IukOI+nTWAGkiZEKCO35rWN1wIr4tS7YFr1f4qSvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "3.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-color/-/supports-color-3.1.2.tgz", + "integrity": "sha512-F8dvPrZJtNzvDRX26eNXT4a7AecAvTGljmmnI39xEgSpbHKhQ7N0dO/NTxUExd0wuLHp4zbwYY7lvHq0aKpwrA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver": { + "version": "1.8.4", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "semver": "^6.3.0" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/table/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/text-decoder": { + "version": "1.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/text-decoder/-/text-decoder-1.2.1.tgz", + "integrity": "sha512-x9v3H/lTKIJKQQe7RPQkLfKAnc9lUTkWDypIQgTzPJAq+5/GCDHonmshfvlsNSj58yyshbIJJDLmU15qNERrXQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-through": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/trim-right": { + "version": "1.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/uglify-js": { + "version": "3.19.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", + "dev": true, + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/undertaker-registry": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/undertaker/node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fastest-levenshtein": "^1.0.7" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/user-home": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/user-home/-/user-home-2.0.0.tgz", + "integrity": "sha512-KMWqdlOcjCYdtIJpicDSFBQ8nFwS2i9sslAd6f4+CBGcU4gist2REnr2fxj2YocvJFxSF3ZOHLYLVZnUxv4BZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", + "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8flags": { + "version": "4.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/value-or-function": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0" + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "engines": { - "node": ">=4" - } + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true, + "license": "MIT" }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", + "node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" }, "engines": { - "node": ">=6" + "node": ">=10.13.0" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dev": true, + "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "bl": "^5.0.0", + "vinyl": "^3.0.0" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">=10.13.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "node_modules/vinyl-fs": { + "version": "4.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", + "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", "dev": true, + "license": "MIT", "dependencies": { - "argparse": "^2.0.1" + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.0", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.0", + "vinyl-sourcemap": "^2.0.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "node_modules/vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "dev": true, + "license": "MIT", "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=10.13.0" } }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "dev": true, + "license": "ISC", + "dependencies": { + "source-map": "^0.5.1" + } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/vinyl/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 10" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/which": { + "version": "1.2.14", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/which/-/which-1.2.14.tgz", + "integrity": "sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw==", + "dev": true, + "license": "ISC", "dependencies": { - "mime-db": "1.52.0" + "isexe": "^2.0.0" }, - "engines": { - "node": ">= 0.6" + "bin": { + "which": "bin/which" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true, + "license": "MIT" }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { - "node": ">=6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=0.6" + "node": ">=8" } }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/sshpk": { - "version": "1.18.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/sshpk/-/sshpk-1.18.0.tgz", - "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/tldts": { - "version": "6.1.50", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tldts/-/tldts-6.1.50.tgz", - "integrity": "sha512-q9GOap6q3KCsLMdOjXhWU5jVZ8/1dIib898JBRLsN+tBhENpBDcAVQbE0epADOjw11FhQQy9AcbqKGBQPUfTQA==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "license": "MIT", "dependencies": { - "tldts-core": "^6.1.50" + "mkdirp": "^0.5.1" }, - "bin": { - "tldts": "bin/cli.js" + "engines": { + "node": ">=4" } }, - "node_modules/tldts-core": { - "version": "6.1.50", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tldts-core/-/tldts-core-6.1.50.tgz", - "integrity": "sha512-na2EcZqmdA2iV9zHV7OHQDxxdciEpxrjbkp+aHmZgnZKHzoElLajP59np5/4+sare9fQBfixgvXKx8ev1d7ytw==" + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } }, - "node_modules/tough-cookie": { - "version": "5.0.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tough-cookie/-/tough-cookie-5.0.0.tgz", - "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", - "dependencies": { - "tldts": "^6.1.32" - }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=16" + "node": ">=10" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": "*" + "node": ">=10" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" } }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "bin": { - "uuid": "bin/uuid" + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://zowe.jfrog.io/artifactory/api/npm/npm-org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/onboarding-enabler-nodejs/package.json b/onboarding-enabler-nodejs/package.json index a8737c9cf9..8f5a9fa253 100644 --- a/onboarding-enabler-nodejs/package.json +++ b/onboarding-enabler-nodejs/package.json @@ -2,10 +2,14 @@ "name": "@zowe/apiml-onboarding-enabler-nodejs", "version": "3.0.43", "description": "NodeJS enabler for Zowe API Mediation Layer", + "type": "module", "main": "src/index.js", "scripts": { - "start": "node src/index.js NODE_DEBUG=request", - "test": "echo \"Error: no test specified\" && exit 1" + "start": "node src/index.js NODE_DEBUG=*", + "prepare": "npx --yes license-check-and-add check", + "prepublish": "gulp", + "test": "gulp test", + "integration": "gulp test:integration" }, "repository": { "type": "git", @@ -15,13 +19,37 @@ "license": "EPL-2.0", "homepage": ".", "dependencies": { - "eureka-js-client": "4.5.0" + "async": "3.2.6", + "js-yaml": "4.1.0", + "lodash": "4.17.21" }, "devDependencies": { - "js-yaml": "4.1.0" + "babel-core": "6.26.3", + "babel-istanbul": "0.12.2", + "babel-preset-env": "1.7.0", + "chai": "5.1.2", + "coveralls": "3.1.1", + "eslint": "^2.13.1", + "eslint-config-airbnb-base": "^3.0.1", + "eslint-plugin-import": "^1.16.0", + "gulp": "5.0.0", + "gulp-babel": "^7.0.0", + "gulp-env": "0.4.0", + "gulp-eslint": "6.0.0", + "gulp-istanbul": "1.1.3", + "gulp-mocha": "10.0.1", + "nock": "13.5.6", + "sinon": "19.0.2", + "sinon-chai": "4.0.0" }, - "overrides": { - "tough-cookie": "5.0.0" + "greenkeeper": { + "ignore": [ + "eslint", + "eslint-config-airbnb-base", + "eslint-plugin-import", + "gulp-eslint", + "gulp-mocha" + ] }, "engines": { "npm": "=10.9.0", diff --git a/onboarding-enabler-nodejs/src/AwsMetadata.js b/onboarding-enabler-nodejs/src/AwsMetadata.js new file mode 100644 index 0000000000..c789d9f33e --- /dev/null +++ b/onboarding-enabler-nodejs/src/AwsMetadata.js @@ -0,0 +1,122 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import async from 'async'; +import Logger from './Logger.js'; + +/* + Utility class for pulling AWS metadata that Eureka requires when + registering as an Amazon instance (datacenter). +*/ +export default class AwsMetadata { + constructor(config = {}) { + this.logger = config.logger || new Logger(); + this.host = config.host || '169.254.169.254'; + } + + fetchMetadata(resultsCallback) { + async.parallel({ + 'ami-id': callback => { + this.lookupMetadataKey('ami-id', callback); + }, + 'instance-id': callback => { + this.lookupMetadataKey('instance-id', callback); + }, + 'instance-type': callback => { + this.lookupMetadataKey('instance-type', callback); + }, + 'local-ipv4': callback => { + this.lookupMetadataKey('local-ipv4', callback); + }, + 'local-hostname': callback => { + this.lookupMetadataKey('local-hostname', callback); + }, + 'availability-zone': callback => { + this.lookupMetadataKey('placement/availability-zone', callback); + }, + 'public-hostname': callback => { + this.lookupMetadataKey('public-hostname', callback); + }, + 'public-ipv4': callback => { + this.lookupMetadataKey('public-ipv4', callback); + }, + mac: callback => { + this.lookupMetadataKey('mac', callback); + }, + accountId: callback => { + // the accountId is in the identity document. + this.lookupInstanceIdentity((error, identity) => { + callback(null, identity ? identity.accountId : null); + }); + }, + }, (error, results) => { + // we need the mac before we can lookup the vpcId... + this.lookupMetadataKey(`network/interfaces/macs/${results.mac}/vpc-id`, (err, vpcId) => { + results['vpc-id'] = vpcId; + this.logger.debug('Found Instance AWS Metadata', results); + const filteredResults = Object.keys(results).reduce((filtered, prop) => { + if (results[prop]) filtered[prop] = results[prop]; + return filtered; + }, {}); + resultsCallback(filteredResults); + }); + }); + } + + lookupMetadataKey(key, callback) { + fetch(`http://${this.host}/latest/meta-data/${key}`).then(response => { + let error = null; + if (!response.ok) { + error = new Error(`${response.statusCode}: ${response.statusMessage}`); + this.logger.error('Error requesting metadata key', error); + } + response.text().then(text => { + callback(null, (error || response.statusCode !== 200) ? null : text); + }); + }); + } + + lookupInstanceIdentity(callback) { + fetch(`http://${this.host}/latest/dynamic/instance-identity/document`).then(response => { + let error = null; + if (!response.ok) { + error = new Error(`${response.statusCode}: ${response.statusMessage}`); + this.logger.error('Error requesting instance identity document', error); + } + response.json().then(json => { + callback(null, (error || response.statusCode !== 200) ? null : json); + }); + }); + } +} diff --git a/onboarding-enabler-nodejs/src/ConfigClusterResolver.js b/onboarding-enabler-nodejs/src/ConfigClusterResolver.js new file mode 100644 index 0000000000..48ada81e40 --- /dev/null +++ b/onboarding-enabler-nodejs/src/ConfigClusterResolver.js @@ -0,0 +1,87 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import Logger from './Logger.js'; + +/* + Locates a Eureka host using static configuration. Configuration can either be + done using a simple host and port, or a map of serviceUrls. + */ +export default class ConfigClusterResolver { + constructor(config, logger) { + this.logger = logger || new Logger(); + this.config = config; + this.serviceUrls = this.buildServiceUrls(); + } + + resolveEurekaUrl(callback, retryAttempt = 0) { + if (this.serviceUrls.length > 1 && retryAttempt > 0) { + this.serviceUrls.push(this.serviceUrls.shift()); + } + callback(null, this.serviceUrls[0]); + } + + buildServiceUrls() { + const { host, port, servicePath, ssl, + serviceUrls, preferSameZone } = this.config.eureka; + const { dataCenterInfo } = this.config.instance; + const metadata = dataCenterInfo ? dataCenterInfo.metadata : undefined; + const instanceZone = metadata ? metadata['availability-zone'] : undefined; + const urls = []; + const zones = this.getAvailabilityZones(); + if (serviceUrls) { + zones.forEach((zone) => { + if (serviceUrls[zone]) { + if (preferSameZone && instanceZone && instanceZone === zone) { + urls.unshift(...serviceUrls[zone]); + } + urls.push(...serviceUrls[zone]); + } + }); + } + if (!urls.length) { + const protocol = ssl ? 'https' : 'http'; + urls.push(`${protocol}://${host}:${port}${servicePath}`); + } + return urls; + } + + getAvailabilityZones() { + const { ec2Region, availabilityZones } = this.config.eureka; + if (ec2Region && availabilityZones && availabilityZones[ec2Region]) { + return availabilityZones[ec2Region]; + } + return ['default']; + } +} diff --git a/onboarding-enabler-nodejs/src/DnsClusterResolver.js b/onboarding-enabler-nodejs/src/DnsClusterResolver.js new file mode 100644 index 0000000000..43af4c9dda --- /dev/null +++ b/onboarding-enabler-nodejs/src/DnsClusterResolver.js @@ -0,0 +1,164 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import dns from 'dns'; +import async from 'async'; +import shuffle from 'lodash/shuffle.js'; +import xor from 'lodash/xor.js'; +import Logger from './Logger.js'; + +function noop() {} + +/* + Locates a Eureka host using DNS lookups. The DNS records are looked up by a naming + convention and TXT records must be created according to the Eureka Wiki here: + https://github.com/Netflix/eureka/wiki/Configuring-Eureka-in-AWS-Cloud + + Naming convention: txt.. + */ +export default class DnsClusterResolver { + constructor(config, logger) { + this.logger = logger || new Logger(); + this.serverList = undefined; + this.config = config; + if (!this.config.eureka.ec2Region) { + throw new Error( + 'EC2 region was undefined. ' + + 'config.eureka.ec2Region must be set to resolve Eureka using DNS records.' + ); + } + + if (this.config.eureka.clusterRefreshInterval) { + this.startClusterRefresh(); + } + } + + resolveEurekaUrl(callback, retryAttempt = 0) { + this.getCurrentCluster((err) => { + if (err) return callback(err); + + if (retryAttempt > 0) { + this.serverList.push(this.serverList.shift()); + } + const { port, servicePath, ssl } = this.config.eureka; + const protocol = ssl ? 'https' : 'http'; + callback(null, `${protocol}://${this.serverList[0]}:${port}${servicePath}`); + }); + } + + getCurrentCluster(callback) { + if (this.serverList) { + return callback(null, this.serverList); + } + this.refreshCurrentCluster((err) => { + if (err) return callback(err); + return callback(null, this.serverList); + }); + } + + startClusterRefresh() { + const refreshTimer = setInterval(() => { + this.refreshCurrentCluster((err) => { + if (err) this.logger.warn(err.message); + }); + }, this.config.eureka.clusterRefreshInterval); + refreshTimer.unref(); + } + + refreshCurrentCluster(callback = noop) { + this.resolveClusterHosts((err, hosts) => { + if (err) return callback(err); + // if the cluster is the same (aside from order), we want to maintain our order + if (xor(this.serverList, hosts).length) { + this.serverList = hosts; + this.logger.info('Eureka cluster located, hosts will be used in the following order', + this.serverList); + } else { + this.logger.debug('Eureka cluster hosts unchanged, maintaining current server list.'); + } + callback(); + }); + } + + resolveClusterHosts(callback = noop) { + const { ec2Region, host, preferSameZone } = this.config.eureka; + const { dataCenterInfo } = this.config.instance; + const metadata = dataCenterInfo ? dataCenterInfo.metadata : undefined; + const availabilityZone = metadata ? metadata['availability-zone'] : undefined; + const dnsHost = `txt.${ec2Region}.${host}`; + dns.resolveTxt(dnsHost, (err, addresses) => { + if (err) { + return callback(new Error( + `Error resolving eureka cluster for region [${ec2Region}] using DNS: [${err}]` + )); + } + const zoneRecords = [].concat(...addresses); + const dnsTasks = {}; + zoneRecords.forEach((zoneRecord) => { + dnsTasks[zoneRecord] = (cb) => { + this.resolveZoneHosts(`txt.${zoneRecord}`, cb); + }; + }); + async.parallel(dnsTasks, (error, results) => { + if (error) return callback(error); + const hosts = []; + const myZoneHosts = []; + Object.keys(results).forEach((zone) => { + if (preferSameZone && availabilityZone && zone.lastIndexOf(availabilityZone, 0) === 0) { + myZoneHosts.push(...results[zone]); + } else { + hosts.push(...results[zone]); + } + }); + const combinedHosts = [].concat(shuffle(myZoneHosts), shuffle(hosts)); + if (!combinedHosts.length) { + return callback( + new Error(`Unable to locate any Eureka hosts in any zone via DNS @ ${dnsHost}`)); + } + callback(null, combinedHosts); + }); + }); + } + + resolveZoneHosts(zoneRecord, callback) { + dns.resolveTxt(zoneRecord, (err, results) => { + if (err) { + this.logger.warn(`Failed to resolve cluster zone ${zoneRecord}`, err.message); + return callback(new Error(`Error resolving cluster zone ${zoneRecord}: [${err}]`)); + } + this.logger.debug(`Found Eureka Servers @ ${zoneRecord}`, results); + callback(null, ([].concat(...results)).filter((value) => (!!value))); + }); + } +} diff --git a/onboarding-enabler-nodejs/src/EurekaClient.js b/onboarding-enabler-nodejs/src/EurekaClient.js new file mode 100644 index 0000000000..d12068290e --- /dev/null +++ b/onboarding-enabler-nodejs/src/EurekaClient.js @@ -0,0 +1,698 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import fs from 'fs'; +import yaml from 'js-yaml'; +import lodash from 'lodash'; +const { findIndex, merge } = lodash; +import { findInstance, normalizeDelta } from './deltaUtils.js'; +import path from 'path'; +import { series, waterfall } from 'async'; +import { EventEmitter } from 'events'; + +import AwsMetadata from './AwsMetadata.js'; +import ConfigClusterResolver from './ConfigClusterResolver.js'; +import DnsClusterResolver from './DnsClusterResolver.js'; +import Logger from './Logger.js'; +import defaultConfig from './defaultConfig.js'; +import https from 'https'; + +function noop() {} + +/* + Eureka JS client + This module handles registration with a Eureka server, as well as heartbeats + for reporting instance health. +*/ + +function fileExists(file) { + try { + return fs.statSync(file); + } catch (e) { + return false; + } +} + +function getYaml(file) { + let yml = {}; + if (!fileExists(file)) { + return yml; // no configuration file + } + try { + yml = yaml.load(fs.readFileSync(file, 'utf8')); + } catch (e) { + // configuration file exists but was malformed + throw new Error(`Error loading YAML configuration file: ${file} ${e}`); + } + return yml; +} + +export default class Eureka extends EventEmitter { + constructor(config = {}) { + super(); + // Allow passing in a custom logger: + this.logger = config.logger || new Logger(); + + this.logger.debug('initializing eureka client'); + + // Load up the current working directory and the environment: + const cwd = config.cwd || process.cwd(); + const env = process.env.EUREKA_ENV || process.env.NODE_ENV || 'development'; + + const filename = config.filename || 'eureka-client'; + + // Load in the configuration files: + const defaultYml = getYaml(path.join(cwd, `${filename}.yml`)); + const envYml = getYaml(path.join(cwd, `${filename}-${env}.yml`)); + + // apply config overrides in appropriate order + this.config = merge({}, defaultConfig, defaultYml, envYml, config); + + // Validate the provided the values we need: + this.validateConfig(this.config); + + this.requestMiddleware = this.config.requestMiddleware; + + this.hasFullRegistry = false; + + if (this.amazonDataCenter) { + this.metadataClient = new AwsMetadata({ + logger: this.logger, + }); + } + + if (this.config.eureka.useDns) { + this.clusterResolver = new DnsClusterResolver(this.config, this.logger); + } else { + this.clusterResolver = new ConfigClusterResolver(this.config, this.logger); + } + + this.cache = { + app: {}, + vip: {}, + }; + } + + /* + Helper method to get the instance ID. If the datacenter is AWS, this will be the + instance-id in the metadata. Else, it's the hostName. + */ + get instanceId() { + if (this.config.instance.instanceId) { + return this.config.instance.instanceId; + } else if (this.amazonDataCenter) { + return this.config.instance.dataCenterInfo.metadata['instance-id']; + } + return this.config.instance.hostName; + } + + /* + Helper method to determine if this is an AWS datacenter. + */ + get amazonDataCenter() { + const { dataCenterInfo } = this.config.instance; + return ( + dataCenterInfo && + dataCenterInfo.name && + dataCenterInfo.name.toLowerCase() === 'amazon' + ); + } + + /* + Registers instance with Eureka, begins heartbeats, and fetches registry. + */ + start(callback = noop) { + series([ + done => { + if (this.metadataClient && this.config.eureka.fetchMetadata) { + return this.addInstanceMetadata(done); + } + done(); + }, + done => { + if (this.config.eureka.registerWithEureka) { + return this.register(done); + } + done(); + }, + done => { + if (this.config.eureka.registerWithEureka) { + this.startHeartbeats(); + } + if (this.config.eureka.fetchRegistry) { + this.startRegistryFetches(); + if (this.config.eureka.waitForRegistry) { + const waitForRegistryUpdate = (cb) => { + this.fetchRegistry(() => { + const instances = this.getInstancesByVipAddress(this.config.instance.vipAddress); + if (instances.length === 0) setTimeout(() => waitForRegistryUpdate(cb), 2000); + else cb(); + }); + }; + return waitForRegistryUpdate(done); + } + this.fetchRegistry(done); + } else { + done(); + } + }, + ], (err, ...rest) => { + if (err) { + this.logger.warn('Error starting the Eureka Client', err); + } else { + this.emit('started'); + } + callback(err, ...rest); + }); + } + + /* + De-registers instance with Eureka, stops heartbeats / registry fetches. + */ + stop(callback = noop) { + clearInterval(this.registryFetch); + if (this.config.eureka.registerWithEureka) { + clearInterval(this.heartbeat); + this.deregister(callback); + } else { + callback(); + } + } + + /* + Validates client configuration. + */ + validateConfig(config) { + function validate(namespace, key) { + if (!config[namespace][key]) { + throw new TypeError(`Missing "${namespace}.${key}" config value.`); + } + } + + if (config.eureka.registerWithEureka) { + validate('instance', 'app'); + validate('instance', 'vipAddress'); + validate('instance', 'port'); + validate('instance', 'dataCenterInfo'); + } + + if (typeof config.requestMiddleware !== 'function') { + throw new TypeError('requestMiddleware must be a function'); + } + } + + /* + Registers with the Eureka server and initializes heartbeats on registration success. + */ + register(callback = noop) { + this.config.instance.status = 'UP'; + const connectionTimeout = setTimeout(() => { + this.logger.warn('It looks like it\'s taking a while to register with ' + + 'Eureka. This usually means there is an issue connecting to the host ' + + 'specified. Start application with NODE_DEBUG=http for more logging.'); + }, 10000); + this.eurekaRequest({ + method: 'POST', + uri: this.config.instance.app, + json: true, + body: { instance: this.config.instance }, + }, (error, response, body) => { + clearTimeout(connectionTimeout); + if (!error && response.statusCode === 204) { + this.logger.info( + 'registered with eureka: ', + `${this.config.instance.app}/${this.instanceId}` + ); + this.emit('registered'); + return callback(null); + } else if (error) { + this.logger.warn('Error registering with eureka client.', error); + return callback(error); + } + return callback( + new Error(`eureka registration FAILED: status: ${response.statusCode} body: ${body}`) + ); + }); + } + + /* + De-registers with the Eureka server and stops heartbeats. + */ + deregister(callback = noop) { + this.eurekaRequest({ + method: 'DELETE', + uri: `${this.config.instance.app}/${this.instanceId}`, + }, (error, response, body) => { + if (!error && response.statusCode === 200) { + this.logger.info( + `de-registered with eureka: ${this.config.instance.app}/${this.instanceId}` + ); + this.emit('deregistered'); + return callback(null); + } else if (error) { + this.logger.warn('Error deregistering with eureka', error); + return callback(error); + } + return callback( + new Error(`eureka deregistration FAILED: status: ${response.statusCode} body: ${body}`) + ); + }); + } + + /* + Sets up heartbeats on interval for the life of the application. + Heartbeat interval by setting configuration property: eureka.heartbeatInterval + */ + startHeartbeats() { + this.heartbeat = setInterval(() => { + this.renew(); + }, this.config.eureka.heartbeatInterval); + } + + renew() { + this.eurekaRequest({ + method: 'PUT', + uri: `${this.config.instance.app}/${this.instanceId}`, + }, (error, response, body) => { + if (!error && response.statusCode === 200) { + this.logger.debug('eureka heartbeat success'); + this.emit('heartbeat'); + } else if (!error && response.statusCode === 404) { + this.logger.warn('eureka heartbeat FAILED, Re-registering app'); + this.register(); + } else { + if (error) { + this.logger.error('An error in the request occured.', error); + } + this.logger.warn( + 'eureka heartbeat FAILED, will retry.' + + `statusCode: ${response ? response.statusCode : 'unknown'}` + + `body: ${body} ${error | ''} ` + ); + } + }); + } + + /* + Sets up registry fetches on interval for the life of the application. + Registry fetch interval setting configuration property: eureka.registryFetchInterval + */ + startRegistryFetches() { + this.registryFetch = setInterval(() => { + this.fetchRegistry(err => { + if (err) this.logger.warn('Error fetching registry', err); + }); + }, this.config.eureka.registryFetchInterval); + } + + /* + Retrieves a list of instances from Eureka server given an appId + */ + getInstancesByAppId(appId) { + if (!appId) { + throw new RangeError('Unable to query instances with no appId'); + } + const instances = this.cache.app[appId.toUpperCase()] || []; + if (instances.length === 0) { + this.logger.warn(`Unable to retrieve instances for appId: ${appId}`); + } + return instances; + } + + /* + Retrieves a list of instances from Eureka server given a vipAddress + */ + getInstancesByVipAddress(vipAddress) { + if (!vipAddress) { + throw new RangeError('Unable to query instances with no vipAddress'); + } + const instances = this.cache.vip[vipAddress] || []; + if (instances.length === 0) { + this.logger.warn(`Unable to retrieves instances for vipAddress: ${vipAddress}`); + } + return instances; + } + + /* + Orchestrates fetching registry + */ + fetchRegistry(callback = noop) { + if (this.config.shouldUseDelta && this.hasFullRegistry) { + this.fetchDelta(callback); + } else { + this.fetchFullRegistry(callback); + } + } + + /* + Retrieves all applications registered with the Eureka server + */ + fetchFullRegistry(callback = noop) { + this.eurekaRequest({ + uri: '', + headers: { + Accept: 'application/json', + }, + }, (error, response, body) => { + if (!error && response.statusCode === 200) { + this.logger.debug('retrieved full registry successfully'); + try { + this.transformRegistry(JSON.parse(body)); + } catch (ex) { + return callback(ex); + } + this.emit('registryUpdated'); + this.hasFullRegistry = true; + return callback(null); + } else if (error) { + this.logger.warn('Error fetching registry', error); + return callback(error); + } + callback(new Error('Unable to retrieve full registry from Eureka server')); + }); + } + + /* + Retrieves all applications registered with the Eureka server + */ + fetchDelta(callback = noop) { + this.eurekaRequest({ + uri: 'delta', + headers: { + Accept: 'application/json', + }, + }, (error, response, body) => { + if (!error && response.statusCode === 200) { + this.logger.debug('retrieved delta successfully'); + let applications; + try { + const jsonBody = JSON.parse(body); + applications = jsonBody.applications.application; + this.handleDelta(this.cache, applications); + return callback(null); + } catch (ex) { + return callback(ex); + } + } else if (error) { + this.logger.warn('Error fetching delta registry', error); + return callback(error); + } + callback(new Error('Unable to retrieve delta registry from Eureka server')); + }); + } + /* + Transforms the given registry and caches the registry locally + */ + transformRegistry(registry) { + if (!registry) { + this.logger.warn('Unable to transform empty registry'); + } else { + if (!registry.applications.application) { + return; + } + const newCache = { app: {}, vip: {} }; + if (Array.isArray(registry.applications.application)) { + registry.applications.application.forEach((app) => { + this.transformApp(app, newCache); + }); + } else { + this.transformApp(registry.applications.application, newCache); + } + this.cache = newCache; + } + } + + /* + Transforms the given application and places in client cache. If an application + has a single instance, the instance is placed into the cache as an array of one + */ + transformApp(app, cache) { + if (app.instance.length) { + app.instance + .filter(this.validateInstance.bind(this)) + .forEach((inst) => this.addInstance(cache, inst)); + } else if (this.validateInstance(app.instance)) { + this.addInstance(cache, app.instance); + } + } + + /* + Returns true if instance filtering is disabled, or if the instance is UP + */ + validateInstance(instance) { + return (!this.config.eureka.filterUpInstances || instance.status === 'UP'); + } + + /* + Returns an array of vipAddresses from string vipAddress given by eureka + */ + splitVipAddress(vipAddress) { // eslint-disable-line + if (typeof vipAddress !== 'string') { + return []; + } + + return vipAddress.split(','); + } + + handleDelta(cache, appDelta) { + const delta = normalizeDelta(appDelta); + delta.forEach((app) => { + app.instance.forEach((instance) => { + switch (instance.actionType) { + case 'ADDED': this.addInstance(cache, instance); break; + case 'MODIFIED': this.modifyInstance(cache, instance); break; + case 'DELETED': this.deleteInstance(cache, instance); break; + default: this.logger.warn('Unknown delta actionType', instance.actionType); break; + } + }); + }); + } + + addInstance(cache, instance) { + if (!this.validateInstance(instance)) return; + const vipAddresses = this.splitVipAddress(instance.vipAddress); + const appName = instance.app.toUpperCase(); + vipAddresses.forEach((vipAddress) => { + const alreadyContains = findIndex(cache.vip[vipAddress], findInstance(instance)) > -1; + if (alreadyContains) return; + if (!cache.vip[vipAddress]) { + cache.vip[vipAddress] = []; + } + cache.vip[vipAddress].push(instance); + }); + if (!cache.app[appName]) cache.app[appName] = []; + const alreadyContains = findIndex(cache.app[appName], findInstance(instance)) > -1; + if (alreadyContains) return; + cache.app[appName].push(instance); + } + + modifyInstance(cache, instance) { + const vipAddresses = this.splitVipAddress(instance.vipAddress); + const appName = instance.app.toUpperCase(); + vipAddresses.forEach((vipAddress) => { + const index = findIndex(cache.vip[vipAddress], findInstance(instance)); + if (index > -1) cache.vip[vipAddress].splice(index, 1, instance); + else this.addInstance(cache, instance); + }); + const index = findIndex(cache.app[appName], findInstance(instance)); + if (index > -1) cache.app[appName].splice(cache.vip[instance.vipAddress], 1, instance); + else this.addInstance(cache, instance); + } + + deleteInstance(cache, instance) { + const vipAddresses = this.splitVipAddress(instance.vipAddress); + const appName = instance.app.toUpperCase(); + vipAddresses.forEach((vipAddress) => { + const index = findIndex(cache.vip[vipAddress], findInstance(instance)); + if (index > -1) cache.vip[vipAddress].splice(index, 1); + }); + const index = findIndex(cache.app[appName], findInstance(instance)); + if (index > -1) cache.app[appName].splice(cache.vip[instance.vipAddress], 1); + } + + /* + Fetches the metadata using the built-in client and updates the instance + configuration with the hostname and IP address. If the value of the config + option 'eureka.useLocalMetadata' is true, then the local IP address and + hostname is used. Otherwise, the public IP address and hostname is used. If + 'eureka.preferIpAddress' is true, the IP address will be used as the hostname. + + A string replacement is done on the healthCheckUrl, statusPageUrl and + homePageUrl so that users can define the URLs with a placeholder for the + host ('__HOST__'). This allows flexibility since the host isn't known until + the metadata is fetched. The replaced value respects the config option + 'eureka.useLocalMetadata' as described above. + + This will only get called when dataCenterInfo.name is Amazon, but you can + set config.eureka.fetchMetadata to false if you want to provide your own + metadata in AWS environments. + */ + addInstanceMetadata(callback = noop) { + this.metadataClient.fetchMetadata(metadataResult => { + this.config.instance.dataCenterInfo.metadata = merge( + this.config.instance.dataCenterInfo.metadata, + metadataResult + ); + const useLocal = this.config.eureka.useLocalMetadata; + const preferIpAddress = this.config.eureka.preferIpAddress; + const metadataHostName = metadataResult[useLocal ? 'local-hostname' : 'public-hostname']; + const metadataIpAddress = metadataResult[useLocal ? 'local-ipv4' : 'public-ipv4']; + this.config.instance.hostName = preferIpAddress ? metadataIpAddress : metadataHostName; + this.config.instance.ipAddr = metadataIpAddress; + + if (this.config.instance.statusPageUrl) { + const { statusPageUrl } = this.config.instance; + const replacedUrl = statusPageUrl.replace('__HOST__', this.config.instance.hostName); + this.config.instance.statusPageUrl = replacedUrl; + } + if (this.config.instance.healthCheckUrl) { + const { healthCheckUrl } = this.config.instance; + const replacedUrl = healthCheckUrl.replace('__HOST__', this.config.instance.hostName); + this.config.instance.healthCheckUrl = replacedUrl; + } + if (this.config.instance.homePageUrl) { + const { homePageUrl } = this.config.instance; + const replacedUrl = homePageUrl.replace('__HOST__', this.config.instance.hostName); + this.config.instance.homePageUrl = replacedUrl; + } + + callback(); + }); + } + + /* + Helper method for making a request to the Eureka server. Handles resolving + the current cluster as well as some default options. + */ + eurekaRequest(opts, callback, retryAttempt = 0) { + waterfall([ + /* + Resolve Eureka Clusters + */ + done => { + this.clusterResolver.resolveEurekaUrl((err, eurekaUrl) => { + if (err) return done(err); + const requestOpts = merge({}, opts, { + baseUrl: eurekaUrl, + gzip: true, + }); + done(null, requestOpts); + }, retryAttempt); + }, + /* + Apply Request Middleware + */ + (requestOpts, done) => { + this.requestMiddleware(requestOpts, (newRequestOpts) => { + if (typeof newRequestOpts !== 'object') { + return done(new Error('requestMiddleware did not return an object')); + } + done(null, newRequestOpts); + }); + }, + /* + Perform Request + */ + (requestOpts, done) => { + const method = requestOpts.method ? requestOpts.method.toUpperCase() : 'GET'; + const url = new URL(requestOpts.baseUrl + requestOpts.uri); + + const headers = requestOpts.headers || {}; + headers['Content-Type'] = 'application/json'; + + const options = { + method, + hostname: url.hostname, + port: url.port, + path: url.pathname, + headers, + cert: requestOpts.cert, + key: requestOpts.key, + ca: requestOpts.ca, + }; + this.logger.debug(`prepared options for the request ${JSON.stringify(options)}`); + + let response = {}; + const req = https.request(options, (res) => { + this.logger.debug(`Received status code: ${res.statusCode}`); + + response = res; + let data = ''; + if (res.statusCode === 204) { + done(null, res, null, requestOpts); + } else { + res.on('data', chunk => { + data += chunk; + }); + res.on('end', () => { + this.logger.debug(`Received data: ${data}`); + done(null, res, data, requestOpts); + }); + } + }); + req.on('error', e => { + this.logger.error(`Error occurred on ${url}: ${e}`); + done(e, response, null, requestOpts); + }); + if (requestOpts.body) { + req.write(JSON.stringify(requestOpts.body)); + } + req.end(); + }, + ], + /* + Handle Final Output. + */ + (error, response, body, requestOpts) => { + if (error) this.logger.error('Problem making eureka request', error); + + // Perform retry if request failed and we have attempts left + const responseInvalid = response + && response.statusCode + && String(response.statusCode)[0] === '5'; + + if ((error || responseInvalid) && retryAttempt < this.config.eureka.maxRetries) { + const nextRetryDelay = this.config.eureka.requestRetryDelay * (retryAttempt + 1); + this.logger.warn(`Eureka request failed to endpoint ${requestOpts.baseUrl}, ` + + `next server retry in ${nextRetryDelay}ms`); + + setTimeout(() => this.eurekaRequest(opts, callback, retryAttempt + 1), + nextRetryDelay); + return; + } + + callback(error, response, body); + }); + } +} diff --git a/onboarding-enabler-nodejs/src/Logger.js b/onboarding-enabler-nodejs/src/Logger.js new file mode 100644 index 0000000000..455342c687 --- /dev/null +++ b/onboarding-enabler-nodejs/src/Logger.js @@ -0,0 +1,81 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* eslint-disable no-underscore-dangle */ +const LEVELS = { + error: 50, + warn: 40, + info: 30, + debug: 20, +}; +const DEFAULT_LEVEL = LEVELS.info; + +export default class Logger { + constructor() { + this._level = DEFAULT_LEVEL; + } + + level(inVal) { + let val = inVal; + if (val) { + if (typeof val === 'string') { + val = LEVELS[val]; + } + this._level = val || DEFAULT_LEVEL; + } + return this._level; + } + + // Abstract the console call: + _log(method, args) { + if (this._level <= LEVELS[method === 'log' ? 'debug' : method]) { + /* eslint-disable no-console */ + console[method](...args); + /* eslint-enable no-console */ + } + } + + error(...args) { + return this._log('error', args); + } + warn(...args) { + return this._log('warn', args); + } + info(...args) { + return this._log('info', args); + } + debug(...args) { + return this._log('log', args); + } +} diff --git a/onboarding-enabler-nodejs/src/defaultConfig.js b/onboarding-enabler-nodejs/src/defaultConfig.js new file mode 100644 index 0000000000..b448838749 --- /dev/null +++ b/onboarding-enabler-nodejs/src/defaultConfig.js @@ -0,0 +1,57 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +// Default configuration values: +export default { + requestMiddleware: (request, done) => done(request), + shouldUseDelta: false, + eureka: { + heartbeatInterval: 30000, + registryFetchInterval: 30000, + maxRetries: 3, + requestRetryDelay: 500, + fetchRegistry: true, + filterUpInstances: true, + servicePath: '/eureka/v2/apps/', + ssl: false, + useDns: false, + preferSameZone: true, + clusterRefreshInterval: 300000, + fetchMetadata: true, + registerWithEureka: true, + useLocalMetadata: false, + preferIpAddress: false, + }, + instance: {}, +}; diff --git a/onboarding-enabler-nodejs/src/deltaUtils.js b/onboarding-enabler-nodejs/src/deltaUtils.js new file mode 100644 index 0000000000..8ed4443525 --- /dev/null +++ b/onboarding-enabler-nodejs/src/deltaUtils.js @@ -0,0 +1,51 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* + General utilities for handling processing of delta changes from eureka. +*/ +export function arrayOrObj(mysteryValue) { + return Array.isArray(mysteryValue) ? mysteryValue : [mysteryValue]; +} + +export function findInstance(a) { + return b => a.hostName === b.hostName && a.port.$ === b.port.$; +} + +export function normalizeDelta(appDelta) { + return arrayOrObj(appDelta).map((app) => { + app.instance = arrayOrObj(app.instance); + return app; + }); +} diff --git a/onboarding-enabler-nodejs/src/index.js b/onboarding-enabler-nodejs/src/index.js index df8a04d2d0..a1a12f9d01 100644 --- a/onboarding-enabler-nodejs/src/index.js +++ b/onboarding-enabler-nodejs/src/index.js @@ -8,9 +8,9 @@ * Copyright Contributors to the Zowe Project. */ -const Eureka = require('eureka-js-client').Eureka; -const yaml = require('js-yaml'); -const fs = require('fs'); +import Eureka from './EurekaClient.js'; +import yaml from 'js-yaml'; +import * as fs from 'fs'; let certFile = null; let keyFile = null; @@ -21,56 +21,48 @@ let passPhrase = null; * Read ssl service configuration */ function readTlsProps() { - try { - const config = yaml.load(fs.readFileSync('config/service-configuration.yml', 'utf8')); - certFile = config.ssl.certificate; - keyFile = config.ssl.keystore; - caFile = config.ssl.caFile; - passPhrase = config.ssl.keyPassword; - - } catch (e) { - console.log(e); - } + try { + const config = yaml.load(fs.readFileSync('config/service-configuration.yml', 'utf8')); + certFile = config.ssl.certificate; + keyFile = config.ssl.keystore; + caFile = config.ssl.caFile; + passPhrase = config.ssl.keyPassword; + } catch (e) { + console.log(e); + } } readTlsProps(); -let tlsOptions = { - cert: fs.readFileSync(certFile), - key: fs.readFileSync(keyFile), - passphrase: passPhrase, - ca: fs.readFileSync(caFile) +export const tlsOptions = { + cert: fs.readFileSync(certFile), + key: fs.readFileSync(keyFile), + passphrase: passPhrase, + ca: fs.readFileSync(caFile), }; const client = new Eureka({ - filename: 'service-configuration', - cwd: 'config/', - requestMiddleware: (requestOpts, done) => { - done(Object.assign(requestOpts, tlsOptions)); - } + filename: 'service-configuration', + cwd: 'config/', + requestMiddleware: (requestOpts, done) => { + done(Object.assign(requestOpts, tlsOptions)); + }, }); /** * Function that uses the eureka-js-client library to register the application to Eureka */ -function connectToEureka() { - client.start(function(error) { - if (error != null) { - console.log(JSON.stringify(error)); - } - }); +export function connectToEureka() { + client.start((error) => { + if (error != null) { + console.log(JSON.stringify(error)); + } + }); } /** * Unregister the Eureka client from Eureka (i.e. when the application down) */ -function unregisterFromEureka() { - console.log("\nUnregistering the service from Eureka...") - client.stop(); +export function unregisterFromEureka() { + console.log('\nUnregistering the service from Eureka...'); + client.stop(); } - -connectToEureka(); - -module.exports = {connectToEureka, tlsOptions, unregisterFromEureka}; - - - diff --git a/onboarding-enabler-nodejs/test/AwsMetadata.test.js b/onboarding-enabler-nodejs/test/AwsMetadata.test.js new file mode 100644 index 0000000000..1b86accc42 --- /dev/null +++ b/onboarding-enabler-nodejs/test/AwsMetadata.test.js @@ -0,0 +1,180 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import sinon from 'sinon'; +import * as chai from 'chai'; +import sinonChai from 'sinon-chai'; +import AwsMetadata from '../src/AwsMetadata.js'; + +const expect = chai.expect; + +chai.use(sinonChai); + +function mockResponses(type) { + const requestStub = sinon.stub(global, 'fetch'); + const mock = (url, body) => { + requestStub.withArgs(url).returns(Promise.resolve({ + ok: true, + statusCode: 200, + text: () => Promise.resolve(body), + json: () => Promise.resolve(JSON.parse(body)), + })); + }; + const mockError = (url) => { + requestStub.withArgs(url).returns(Promise.resolve({ + ok: false, + statusMessage: 'fail', + statusCode: 500, + text: () => Promise.resolve(null), + json: () => Promise.resolve(null), + })); + }; + mock('http://127.0.0.1:8888/latest/meta-data/ami-id', 'ami-123'); + mock('http://127.0.0.1:8888/latest/meta-data/instance-id', 'i123'); + mock('http://127.0.0.1:8888/latest/meta-data/instance-type', 'medium'); + mock('http://127.0.0.1:8888/latest/meta-data/local-ipv4', '1.1.1.1'); + mock('http://127.0.0.1:8888/latest/meta-data/local-hostname', 'ip-127-0-0-1'); + mock('http://127.0.0.1:8888/latest/meta-data/placement/availability-zone', 'fake-1'); + switch (type) { + case 'full': + mock('http://127.0.0.1:8888/latest/meta-data/public-hostname', 'ec2-127-0-0-1'); + mock('http://127.0.0.1:8888/latest/meta-data/public-ipv4', '2.2.2.2'); + mock('http://127.0.0.1:8888/latest/dynamic/instance-identity/document', '{"accountId":"123456"}'); + break; + case 'withoutPublic': + mock('http://127.0.0.1:8888/latest/meta-data/public-hostname', undefined); + mock('http://127.0.0.1:8888/latest/meta-data/public-ipv4', null); + mock('http://127.0.0.1:8888/latest/dynamic/instance-identity/document', '{"accountId":"123456"}'); + break; + case 'failing': + mockError('http://127.0.0.1:8888/latest/meta-data/public-hostname', undefined); + mockError('http://127.0.0.1:8888/latest/meta-data/public-ipv4', null); + mockError('http://127.0.0.1:8888/latest/dynamic/instance-identity/document', '{"accountId":"123456"}'); + break; + default: + } + mock('http://127.0.0.1:8888/latest/meta-data/mac', 'AB:CD:EF:GH:IJ'); + mock('http://127.0.0.1:8888/latest/meta-data/network/interfaces/macs/AB:CD:EF:GH:IJ/vpc-id', 'vpc123'); + return requestStub; +} + +describe('AWS Metadata client', () => { + describe('fetchMetadata()', () => { + let client; + beforeEach(() => { + client = new AwsMetadata({ host: '127.0.0.1:8888' }); + }); + + it('should call metadata URIs', (done) => { + const requestStub = mockResponses('full'); + const expected = { + accountId: '123456', + 'ami-id': 'ami-123', + 'availability-zone': 'fake-1', + 'instance-id': 'i123', + 'instance-type': 'medium', + 'local-hostname': 'ip-127-0-0-1', + 'local-ipv4': '1.1.1.1', + mac: 'AB:CD:EF:GH:IJ', + 'public-hostname': 'ec2-127-0-0-1', + 'public-ipv4': '2.2.2.2', + 'vpc-id': 'vpc123', + }; + + client.fetchMetadata(data => { + try { + expect(data).to.deep.equal(expected); + done(); + } catch (e) { + done(e); + } finally { + requestStub.restore(); + } + }); + }); + + it('should call metadata URIs and filter out null and undefined values', (done) => { + const requestStub = mockResponses('withoutPublic'); + + const expected = { + accountId: '123456', + 'ami-id': 'ami-123', + 'availability-zone': 'fake-1', + 'instance-id': 'i123', + 'instance-type': 'medium', + 'local-hostname': 'ip-127-0-0-1', + 'local-ipv4': '1.1.1.1', + mac: 'AB:CD:EF:GH:IJ', + 'vpc-id': 'vpc123', + }; + + client.fetchMetadata(data => { + try { + expect(data).to.deep.equal(expected); + done(); + } catch (e) { + done(e); + } finally { + requestStub.restore(); + } + }); + }); + + it('should call metadata URIs and filter out errored values', (done) => { + const requestStub = mockResponses('failing'); + + const expected = { + 'ami-id': 'ami-123', + 'availability-zone': 'fake-1', + 'instance-id': 'i123', + 'instance-type': 'medium', + 'local-hostname': 'ip-127-0-0-1', + 'local-ipv4': '1.1.1.1', + mac: 'AB:CD:EF:GH:IJ', + 'vpc-id': 'vpc123', + }; + + client.fetchMetadata(data => { + try { + expect(data).to.deep.equal(expected); + done(); + } catch (e) { + done(e); + } finally { + requestStub.restore(); + } + }); + }); + }); +}); diff --git a/onboarding-enabler-nodejs/test/ConfigClusterResolver.test.js b/onboarding-enabler-nodejs/test/ConfigClusterResolver.test.js new file mode 100644 index 0000000000..ec9d310123 --- /dev/null +++ b/onboarding-enabler-nodejs/test/ConfigClusterResolver.test.js @@ -0,0 +1,220 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* eslint-disable no-unused-expressions */ +import { expect } from 'chai'; +import merge from 'lodash/merge.js'; + +import ConfigClusterResolver from '../src/ConfigClusterResolver.js'; + +function makeConfig(overrides = {}) { + const config = { + instance: { + dataCenterInfo: { metadata: { 'availability-zone': '1b' } }, + }, + eureka: { + maxRetries: 0, + ec2Region: 'my-region', + }, + }; + return merge({}, config, overrides); +} + +describe('Config Cluster Resolver', () => { + describe('resolveEurekaUrl() with host/port config', () => { + let resolver; + beforeEach(() => { + resolver = new ConfigClusterResolver(makeConfig({ + eureka: { + host: 'eureka.mydomain.com', + servicePath: '/eureka/v2/apps/', + port: 9999, + }, + })); + }); + + it('should return base Eureka URL using configured host', () => { + resolver.resolveEurekaUrl((err, eurekaUrl) => { + expect(eurekaUrl).to.equal('http://eureka.mydomain.com:9999/eureka/v2/apps/'); + }); + }); + }); + + describe('resolveEurekaUrl() with default serviceUrls', () => { + let resolver; + beforeEach(() => { + resolver = new ConfigClusterResolver(makeConfig({ + eureka: { + serviceUrls: { + default: [ + 'http://eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + }, + }, + })); + }); + + it('should return first Eureka URL from configured serviceUrls', () => { + resolver.resolveEurekaUrl((err, eurekaUrl) => { + expect(eurekaUrl).to.equal('http://eureka1.mydomain.com:9999/eureka/v2/apps/'); + }); + }); + + it('should return next Eureka URL from configured serviceUrls', () => { + resolver.resolveEurekaUrl((err, eurekaUrl) => { + expect(eurekaUrl).to.equal('http://eureka2.mydomain.com:9999/eureka/v2/apps/'); + // next attempt should still be the next server + resolver.resolveEurekaUrl((errTwo, eurekaUrlTwo) => { + expect(eurekaUrlTwo).to.equal('http://eureka2.mydomain.com:9999/eureka/v2/apps/'); + }); + }, 1); + }); + }); + + describe('resolveEurekaUrl() with zoned serviceUrls', () => { + let resolver; + beforeEach(() => { + resolver = new ConfigClusterResolver(makeConfig({ + eureka: { + availabilityZones: { + 'my-region': ['1a', '1b', '1c'], + }, + serviceUrls: { + '1a': [ + 'http://1a-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1a-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1a-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + '1b': [ + 'http://1b-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + '1c': [ + 'http://1b-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + }, + }, + })); + }); + + it('should return first Eureka URL from configured serviceUrls', () => { + resolver.resolveEurekaUrl((err, eurekaUrl) => { + expect(eurekaUrl).to.equal('http://1a-eureka1.mydomain.com:9999/eureka/v2/apps/'); + }); + }); + }); + + describe('resolveEurekaUrl() with zoned serviceUrls and preferSameZone', () => { + let resolver; + beforeEach(() => { + resolver = new ConfigClusterResolver(makeConfig({ + eureka: { + preferSameZone: true, + availabilityZones: { + 'my-region': ['1a', '1b', '1c'], + }, + serviceUrls: { + '1a': [ + 'http://1a-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1a-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1a-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + '1b': [ + 'http://1b-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + '1c': [ + 'http://1b-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + }, + }, + })); + }); + + it('should return first Eureka URL from configured serviceUrls', () => { + resolver.resolveEurekaUrl((err, eurekaUrl) => { + expect(eurekaUrl).to.equal('http://1b-eureka1.mydomain.com:9999/eureka/v2/apps/'); + }); + }); + }); + + describe('resolveEurekaUrl(), zoned serviceUrls, preferSameZone, missing dataCenterInfo', () => { + let resolver; + const config = { + instance: {}, + eureka: { + maxRetries: 0, + ec2Region: 'my-region', + preferSameZone: true, + availabilityZones: { + 'my-region': ['1a', '1b', '1c'], + }, + serviceUrls: { + '1a': [ + 'http://1a-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1a-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1a-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + '1b': [ + 'http://1b-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + '1c': [ + 'http://1b-eureka1.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka2.mydomain.com:9999/eureka/v2/apps/', + 'http://1b-eureka3.mydomain.com:9999/eureka/v2/apps/', + ], + }, + }, + }; + beforeEach(() => { + resolver = new ConfigClusterResolver(config); + }); + + it('should return first Eureka URL from configured serviceUrls', () => { + resolver.resolveEurekaUrl((err, eurekaUrl) => { + expect(eurekaUrl).to.equal('http://1a-eureka1.mydomain.com:9999/eureka/v2/apps/'); + }); + }); + }); +}); diff --git a/onboarding-enabler-nodejs/test/DnsClusterResolver.test.js b/onboarding-enabler-nodejs/test/DnsClusterResolver.test.js new file mode 100644 index 0000000000..6f98773959 --- /dev/null +++ b/onboarding-enabler-nodejs/test/DnsClusterResolver.test.js @@ -0,0 +1,358 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* eslint-disable no-unused-expressions */ +import sinon from 'sinon'; +import dns from 'dns'; +import merge from 'lodash/merge.js'; + +import DnsClusterResolver from '../src/DnsClusterResolver.js'; +import * as chai from 'chai'; +const expect = chai.expect; +import sinonChai from 'sinon-chai'; + +chai.use(sinonChai); + +function makeConfig(overrides = {}) { + const config = { + instance: { + dataCenterInfo: { metadata: { 'availability-zone': '1b' } }, + }, + eureka: { + host: 'eureka.mydomain.com', + servicePath: '/eureka/v2/apps/', + port: 9999, + maxRetries: 0, + ec2Region: 'my-region', + }, + }; + return merge({}, config, overrides); +} + +describe('DNS Cluster Resolver', () => { + describe('DnsClusterResolver', () => { + it('should throw error when ec2Region is undefined', () => { + const config = makeConfig(); + config.eureka.ec2Region = undefined; + function fn() { + return new DnsClusterResolver(config); + } + expect(fn).to.throw(); + }); + }); + + describe('startClusterRefresh()', () => { + let dnsResolver; + let refreshStub; + let clock; + beforeEach(() => { + clock = sinon.useFakeTimers(); + }); + + afterEach(() => { + dnsResolver.refreshCurrentCluster.restore(); + clock.restore(); + }); + + it('should start cluster refreshes on interval', () => { + dnsResolver = new DnsClusterResolver(makeConfig({ + eureka: { clusterRefreshInterval: 300000 }, + })); + refreshStub = sinon.stub(dnsResolver, 'refreshCurrentCluster'); + clock.tick(300000); + expect(refreshStub).to.have.been.calledOnce; + clock.tick(300000); + expect(refreshStub).to.have.been.calledTwice; + clock.restore(); + }); + + it('should log warning on refresh failure', () => { + dnsResolver = new DnsClusterResolver(makeConfig({ + eureka: { clusterRefreshInterval: 300000 }, + })); + refreshStub = sinon.stub(dnsResolver, 'refreshCurrentCluster'); + refreshStub.yields(new Error('fail')); + clock.tick(300000); + expect(refreshStub).to.have.been.calledOnce; + clock.tick(300000); + expect(refreshStub).to.have.been.calledTwice; + clock.restore(); + }); + }); + + describe('resolveEurekaUrl()', () => { + let dnsResolver; + beforeEach(() => { + dnsResolver = new DnsClusterResolver(makeConfig()); + }); + + afterEach(() => { + dnsResolver.resolveClusterHosts.restore(); + }); + + it('should return base Eureka URL using current cluster host', () => { + const resolveHostsStub = sinon.stub(dnsResolver, 'resolveClusterHosts'); + resolveHostsStub.yields(null, ['a.mydomain.com', 'b.mydomain.com', 'c.mydomain.com']); + dnsResolver.resolveEurekaUrl((err, eurekaUrl) => { + expect(eurekaUrl).to.equal('http://a.mydomain.com:9999/eureka/v2/apps/'); + }); + }); + + it('should return base Eureka URL using next cluster host on retry', () => { + const resolveHostsStub = sinon.stub(dnsResolver, 'resolveClusterHosts'); + resolveHostsStub.yields(null, ['a.mydomain.com', 'b.mydomain.com', 'c.mydomain.com']); + dnsResolver.resolveEurekaUrl((err, eurekaUrl) => { + expect(eurekaUrl).to.equal('http://b.mydomain.com:9999/eureka/v2/apps/'); + expect(dnsResolver.serverList).to.eql(['b.mydomain.com', 'c.mydomain.com', + 'a.mydomain.com']); + }, 1); + }); + + it('should return error when resolve fails', () => { + const resolveHostsStub = sinon.stub(dnsResolver, 'resolveClusterHosts'); + resolveHostsStub.yields(new Error('fail')); + dnsResolver.resolveEurekaUrl((err) => { + expect(err).to.not.equal(undefined); + expect(err.message).to.equal('fail'); + }); + }); + }); + + describe('getCurrentCluster()', () => { + let dnsResolver; + beforeEach(() => { + dnsResolver = new DnsClusterResolver(makeConfig()); + }); + + afterEach(() => { + dnsResolver.resolveClusterHosts.restore(); + }); + + it('should call cluster refresh if server list is undefined', () => { + const resolveHostsStub = sinon.stub(dnsResolver, 'resolveClusterHosts'); + resolveHostsStub.onCall(0).yields(null, ['a', 'b', 'c']); + resolveHostsStub.onCall(1).yields(null, ['f', 'a', 'c']); + dnsResolver.getCurrentCluster((err, serverList) => { + expect(serverList).to.include.members(['a', 'b', 'c']); + dnsResolver.getCurrentCluster((errTwo, serverListTwo) => { + expect(serverListTwo).to.include.members(['a', 'b', 'c']); + }); + }); + }); + + it('should return error when refresh fails', () => { + const resolveHostsStub = sinon.stub(dnsResolver, 'resolveClusterHosts'); + resolveHostsStub.yields(new Error('fail')); + dnsResolver.getCurrentCluster((err) => { + expect(err).to.not.equal(undefined); + expect(err.message).to.equal('fail'); + }); + }); + }); + + describe('refreshCurrentCluster', () => { + let dnsResolver; + beforeEach(() => { + dnsResolver = new DnsClusterResolver(makeConfig()); + }); + + afterEach(() => { + dnsResolver.resolveClusterHosts.restore(); + }); + + it('should refresh server list', () => { + const resolveHostsStub = sinon.stub(dnsResolver, 'resolveClusterHosts'); + resolveHostsStub.onCall(0).yields(null, ['a', 'b', 'c']); + resolveHostsStub.onCall(1).yields(null, ['a', 'b', 'c', 'd']); + dnsResolver.refreshCurrentCluster((err) => { + expect(err).to.equal(undefined); + expect(dnsResolver.serverList).to.eql(['a', 'b', 'c']); + dnsResolver.refreshCurrentCluster((errTwo) => { + expect(errTwo).to.equal(undefined); + expect(dnsResolver.serverList).to.eql(['a', 'b', 'c', 'd']); + }); + }); + }); + + it('should maintain server list when cluster remains unchanged', () => { + const resolveHostsStub = sinon.stub(dnsResolver, 'resolveClusterHosts'); + resolveHostsStub.onCall(0).yields(null, ['a', 'b', 'c']); + resolveHostsStub.onCall(1).yields(null, ['c', 'a', 'b']); + dnsResolver.refreshCurrentCluster((err) => { + expect(err).to.equal(undefined); + expect(dnsResolver.serverList).to.eql(['a', 'b', 'c']); + dnsResolver.refreshCurrentCluster((errTwo) => { + expect(errTwo).to.equal(undefined); + expect(dnsResolver.serverList).to.eql(['a', 'b', 'c']); + }); + }); + }); + + it('should return error when resolve fails', () => { + const resolveHostsStub = sinon.stub(dnsResolver, 'resolveClusterHosts'); + resolveHostsStub.yields(new Error('fail')); + dnsResolver.refreshCurrentCluster((err) => { + expect(err).to.not.equal(undefined); + expect(err.message).to.equal('fail'); + }); + }); + }); + + describe('resolveClusterHosts()', () => { + const eurekaHosts = [ + '1a.eureka.mydomain.com', + '1b.eureka.mydomain.com', + '1c.eureka.mydomain.com', + ]; + + afterEach(() => { + dns.resolveTxt.restore(); + }); + + it('should resolve hosts using DNS', (done) => { + const dnsResolver = new DnsClusterResolver(makeConfig()); + const resolveStub = sinon.stub(dns, 'resolveTxt'); + resolveStub.withArgs('txt.my-region.eureka.mydomain.com').yields(null, [eurekaHosts]); + resolveStub.withArgs('txt.1a.eureka.mydomain.com').yields(null, [['1.2.3.4']]); + resolveStub.withArgs('txt.1b.eureka.mydomain.com').yields(null, [['2.2.3.4']]); + resolveStub.withArgs('txt.1c.eureka.mydomain.com').yields(null, [['3.2.3.4']]); + dnsResolver.resolveClusterHosts((err, hosts) => { + expect(hosts).to.include.members(['1.2.3.4', '2.2.3.4', '3.2.3.4']); + done(); + }); + }); + + it('should resolve hosts using DNS and zone affinity', (done) => { + const dnsResolver = new DnsClusterResolver(makeConfig({ + eureka: { preferSameZone: true }, + })); + const resolveStub = sinon.stub(dns, 'resolveTxt'); + resolveStub.withArgs('txt.my-region.eureka.mydomain.com').yields(null, [eurekaHosts]); + resolveStub.withArgs('txt.1a.eureka.mydomain.com').yields(null, [['1.2.3.4']]); + resolveStub.withArgs('txt.1b.eureka.mydomain.com').yields(null, [['2.2.3.4']]); + resolveStub.withArgs('txt.1c.eureka.mydomain.com').yields(null, [['3.2.3.4']]); + dnsResolver.resolveClusterHosts((err, hosts) => { + expect(hosts[0]).to.equal('2.2.3.4'); + expect(hosts).to.include.members(['1.2.3.4', '2.2.3.4', '3.2.3.4']); + dnsResolver.resolveClusterHosts((error, hostsTwo) => { + expect(hostsTwo[0]).to.equal('2.2.3.4'); + expect(hostsTwo).to.include.members(['1.2.3.4', '2.2.3.4', '3.2.3.4']); + done(); + }); + }); + }); + + it('should resolve hosts when dataCenterInfo is undefined', (done) => { + const config = { + instance: {}, + eureka: { + preferSameZone: true, + host: 'eureka.mydomain.com', + servicePath: '/eureka/v2/apps/', + port: 9999, + maxRetries: 0, + ec2Region: 'my-region', + }, + }; + const dnsResolver = new DnsClusterResolver(config); + const resolveStub = sinon.stub(dns, 'resolveTxt'); + resolveStub.withArgs('txt.my-region.eureka.mydomain.com').yields(null, [eurekaHosts]); + resolveStub.withArgs('txt.1a.eureka.mydomain.com').yields(null, [['1.2.3.4']]); + resolveStub.withArgs('txt.1b.eureka.mydomain.com').yields(null, [['2.2.3.4']]); + resolveStub.withArgs('txt.1c.eureka.mydomain.com').yields(null, [['3.2.3.4']]); + dnsResolver.resolveClusterHosts((err, hosts) => { + expect(hosts).to.include.members(['1.2.3.4', '2.2.3.4', '3.2.3.4']); + dnsResolver.resolveClusterHosts((error, hostsTwo) => { + expect(hostsTwo).to.include.members(['1.2.3.4', '2.2.3.4', '3.2.3.4']); + done(); + }); + }); + }); + + it('should return error when initial DNS lookup fails', () => { + const resolveCb = sinon.spy(); + const dnsResolver = new DnsClusterResolver(makeConfig()); + const resolveStub = sinon.stub(dns, 'resolveTxt'); + resolveStub.withArgs('txt.my-region.eureka.mydomain.com') + .yields(new Error('dns error'), null); + + function shouldNotThrow() { + dnsResolver.resolveClusterHosts(resolveCb); + } + + expect(shouldNotThrow).to.not.throw(); + expect(dns.resolveTxt).to.have.been.calledWithMatch('txt.my-region.eureka.mydomain.com'); + expect(resolveCb).to.have.been.calledWithMatch({ + message: 'Error resolving eureka cluster ' + + 'for region [my-region] using DNS: [Error: dns error]', + }); + }); + + it('should return error when DNS lookup fails for an individual zone', () => { + const resolveCb = sinon.spy(); + const dnsResolver = new DnsClusterResolver(makeConfig({ + eureka: { host: 'eureka.mydomain.com', port: 9999, ec2Region: 'my-region' }, + })); + const resolveStub = sinon.stub(dns, 'resolveTxt'); + resolveStub.withArgs('txt.my-region.eureka.mydomain.com').yields(null, [eurekaHosts]); + resolveStub.withArgs('txt.1a.eureka.mydomain.com').yields(null, [['1.2.3.4']]); + resolveStub.withArgs('txt.1b.eureka.mydomain.com').yields(new Error('dns error'), null); + resolveStub.withArgs('txt.1c.eureka.mydomain.com').yields(null, [['3.2.3.4']]); + + function shouldNotThrow() { + dnsResolver.resolveClusterHosts(resolveCb); + } + + expect(shouldNotThrow).to.not.throw(); + expect(resolveCb).to.have.been.calledWithMatch({ + message: 'Error resolving cluster zone txt.1b.eureka.mydomain.com: [Error: dns error]', + }); + }); + + it('should return error when no hosts were found', (done) => { + const dnsResolver = new DnsClusterResolver(makeConfig()); + const resolveStub = sinon.stub(dns, 'resolveTxt'); + resolveStub.withArgs('txt.my-region.eureka.mydomain.com').yields(null, [eurekaHosts]); + resolveStub.withArgs('txt.1a.eureka.mydomain.com').yields(null, []); + resolveStub.withArgs('txt.1b.eureka.mydomain.com').yields(null, []); + resolveStub.withArgs('txt.1c.eureka.mydomain.com').yields(null, []); + dnsResolver.resolveClusterHosts((err) => { + expect(err).to.not.equal(undefined); + expect(err.message).to.equal('Unable to locate any Eureka hosts in any ' + + 'zone via DNS @ txt.my-region.eureka.mydomain.com'); + done(); + }); + }); + }); +}); diff --git a/onboarding-enabler-nodejs/test/EurekaClient.test.js b/onboarding-enabler-nodejs/test/EurekaClient.test.js new file mode 100644 index 0000000000..73e6e6e39e --- /dev/null +++ b/onboarding-enabler-nodejs/test/EurekaClient.test.js @@ -0,0 +1,1407 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/* eslint-disable no-unused-expressions, max-len */ +import sinon from 'sinon'; +import * as chai from 'chai'; +const expect = chai.expect; +import sinonChai from 'sinon-chai'; +import { EventEmitter } from 'events'; +import { join } from 'path'; +import merge from 'lodash/merge.js'; +import https from 'https'; + +import Eureka from '../src/EurekaClient.js'; +import DnsClusterResolver from '../src/DnsClusterResolver.js'; + +chai.use(sinonChai); + +function makeConfig(overrides = {}) { + const config = { + instance: { + app: 'app', + vipAddress: '1.2.2.3', + hostName: 'myhost', + port: 9999, + dataCenterInfo: { + name: 'MyOwn', + }, + }, + eureka: { host: '127.0.0.1', port: 9999, maxRetries: 0 }, + }; + return merge({}, config, overrides); +} + +function mockSuccessfulResponse(accumulator, statusCode) { + const res = { + statusCode: statusCode || 204, + callback: [], + on: (event, callback) => { + console.log(`EVENT ${event}`); + res.callback[event] = callback; + }, + }; + return sinon.stub(https, 'request').yields(res).returns({ + end: () => { + if (statusCode === 200 && res.callback.data('{}')); + if (res.callback.end) res.callback.end.apply(); + }, + write: (body) => { + if (accumulator) accumulator.body = body; + }, + on: () => {}, + }); +} + +describe('Eureka client', () => { + describe('Eureka()', () => { + it('should extend EventEmitter', () => { + expect(new Eureka(makeConfig())).to.be.instanceof(EventEmitter); + }); + + it('should throw an error if no config is found', () => { + function fn() { + return new Eureka(); + } + expect(fn).to.throw(); + }); + + it('should construct with the correct configuration values', () => { + function shouldThrow() { + return new Eureka(); + } + + function noApp() { + return new Eureka({ + instance: { + vipAddress: true, + port: true, + dataCenterInfo: { + name: 'MyOwn', + }, + }, + eureka: { + host: true, + port: true, + }, + }); + } + + function shouldWork() { + return new Eureka({ + instance: { + app: true, + vipAddress: true, + port: true, + dataCenterInfo: { + name: 'MyOwn', + }, + }, + eureka: { + host: true, + port: true, + }, + }); + } + + function shouldWorkNoInstance() { + return new Eureka({ + eureka: { + registerWithEureka: false, + host: true, + port: true, + }, + }); + } + + expect(shouldThrow).to.throw(); + expect(noApp).to.throw(/app/); + expect(shouldWork).to.not.throw(); + expect(shouldWorkNoInstance).to.not.throw(); + }); + + it('should use DnsClusterResolver when configured', () => { + const client = new Eureka({ + instance: { + app: true, + vipAddress: true, + port: true, + dataCenterInfo: { + name: 'MyOwn', + }, + }, + eureka: { + host: true, + port: true, + useDns: true, + ec2Region: 'my-region', + }, + }); + expect(client.clusterResolver.constructor).to.equal(DnsClusterResolver); + }); + + it('should throw when configured to useDns without setting ec2Region', () => { + function shouldThrow() { + return new Eureka({ + instance: { + app: true, + vipAddress: true, + port: true, + dataCenterInfo: { + name: 'MyOwn', + }, + }, + eureka: { + host: true, + port: true, + useDns: true, + }, + }); + } + expect(shouldThrow).to.throw(/ec2Region/); + }); + + it('should accept requestMiddleware', () => { + const requestMiddleware = (opts) => opts; + const client = new Eureka({ + requestMiddleware, + instance: { + app: true, + vipAddress: true, + port: true, + dataCenterInfo: { + name: 'MyOwn', + }, + }, + eureka: { + host: true, + port: true, + useDns: true, + ec2Region: 'my-region', + }, + }); + expect(client.requestMiddleware).to.equal(requestMiddleware); + }); + }); + + describe('get instanceId()', () => { + it('should return the configured instance id', () => { + const instanceId = 'test_id'; + const config = makeConfig({ + instance: { + instanceId, + }, + }); + const client = new Eureka(config); + expect(client.instanceId).to.equal(instanceId); + }); + + it('should return hostname for non-AWS datacenters', () => { + const config = makeConfig(); + const client = new Eureka(config); + expect(client.instanceId).to.equal('myhost'); + }); + + it('should return instance ID for AWS datacenters', () => { + const config = makeConfig({ + instance: { dataCenterInfo: { name: 'Amazon', metadata: { 'instance-id': 'i123' } } }, + }); + const client = new Eureka(config); + expect(client.instanceId).to.equal('i123'); + }); + }); + + describe('start()', () => { + let config; + let client; + let registerSpy; + let fetchRegistrySpy; + let heartbeatsSpy; + let registryFetchSpy; + beforeEach(() => { + config = makeConfig(); + client = new Eureka(config); + }); + + afterEach(() => { + registerSpy.restore(); + fetchRegistrySpy.restore(); + heartbeatsSpy.restore(); + registryFetchSpy.restore(); + }); + + it('should call register, fetch registry, startHeartbeat and startRegistryFetches', (done) => { + registerSpy = sinon.stub(client, 'register').callsArg(0); + fetchRegistrySpy = sinon.stub(client, 'fetchRegistry').callsArg(0); + heartbeatsSpy = sinon.stub(client, 'startHeartbeats'); + registryFetchSpy = sinon.stub(client, 'startRegistryFetches'); + const eventSpy = sinon.spy(); + client.on('started', eventSpy); + + client.start(() => { + expect(registerSpy).to.have.been.calledOnce; + expect(fetchRegistrySpy).to.have.been.calledOnce; + expect(heartbeatsSpy).to.have.been.calledOnce; + expect(registryFetchSpy).to.have.been.calledOnce; + expect(eventSpy).to.have.been.calledOnce; + done(); + }); + }); + + it('should call fetch registry and startRegistryFetches when registration disabled', (done) => { + config = makeConfig({ + eureka: { + registerWithEureka: false, + }, + }); + client = new Eureka(config); + + registerSpy = sinon.stub(client, 'register').callsArg(0); + fetchRegistrySpy = sinon.stub(client, 'fetchRegistry').callsArg(0); + heartbeatsSpy = sinon.stub(client, 'startHeartbeats'); + registryFetchSpy = sinon.stub(client, 'startRegistryFetches'); + const eventSpy = sinon.spy(); + client.on('started', eventSpy); + + client.start(() => { + expect(registerSpy).to.not.have.been.called; + expect(fetchRegistrySpy).to.have.been.calledOnce; + expect(heartbeatsSpy).to.not.have.been.called; + expect(registryFetchSpy).to.have.been.calledOnce; + expect(eventSpy).to.have.been.calledOnce; + done(); + }); + }); + + it('should return error on start failure', (done) => { + registerSpy = sinon.stub(client, 'register').yields(new Error('fail')); + fetchRegistrySpy = sinon.stub(client, 'fetchRegistry').callsArg(0); + heartbeatsSpy = sinon.stub(client, 'startHeartbeats'); + registryFetchSpy = sinon.stub(client, 'startRegistryFetches'); + const eventSpy = sinon.spy(); + client.on('started', eventSpy); + + client.start((error) => { + expect(error).to.match(/fail/); + expect(eventSpy).to.not.have.been.called; + done(); + }); + }); + }); + + describe('startHeartbeats()', () => { + let config; + let client; + let renewSpy; + let clock; + before(() => { + config = makeConfig(); + client = new Eureka(config); + renewSpy = sinon.stub(client, 'renew'); + clock = sinon.useFakeTimers(); + }); + + after(() => { + renewSpy.restore(); + clock.restore(); + }); + + it('should call renew on interval', () => { + client.startHeartbeats(); + clock.tick(30000); + expect(renewSpy).to.have.been.calledOnce; + clock.tick(30000); + expect(renewSpy).to.have.been.calledTwice; + }); + }); + + describe('startRegistryFetches()', () => { + let config; + let client; + let fetchRegistrySpy; + let clock; + before(() => { + config = makeConfig(); + client = new Eureka(config); + fetchRegistrySpy = sinon.stub(client, 'fetchRegistry'); + clock = sinon.useFakeTimers(); + }); + + after(() => { + fetchRegistrySpy.restore(); + clock.restore(); + }); + + it('should call renew on interval', () => { + client.startRegistryFetches(); + clock.tick(30000); + expect(fetchRegistrySpy).to.have.been.calledOnce; + clock.tick(30000); + expect(fetchRegistrySpy).to.have.been.calledTwice; + }); + }); + + describe('stop()', () => { + let config; + let client; + let deregisterSpy; + beforeEach(() => { + config = makeConfig(); + client = new Eureka(config); + deregisterSpy = sinon.stub(client, 'deregister').callsArg(0); + }); + + afterEach(() => { + deregisterSpy.restore(); + }); + + it('should call deregister', () => { + const stopCb = sinon.spy(); + client.stop(stopCb); + + expect(deregisterSpy).to.have.been.calledOnce; + expect(stopCb).to.have.been.calledOnce; + }); + + it('should skip deregister if registration disabled', () => { + config = makeConfig({ + eureka: { + registerWithEureka: false, + }, + }); + client = new Eureka(config); + + const stopCb = sinon.spy(); + client.stop(stopCb); + + expect(deregisterSpy).to.not.have.been.called; + expect(stopCb).to.have.been.calledOnce; + }); + }); + + describe('register()', () => { + let config; + let client; + beforeEach(() => { + config = makeConfig(); + client = new Eureka(config); + }); + + it('should trigger register event', (done) => { + const requestStub = mockSuccessfulResponse(); + client.on('registered', () => { + requestStub.restore(); + done(); + }); + client.register(); + }); + + it('should call register URI', () => { + const accumulator = {}; + const requestStub = mockSuccessfulResponse(accumulator); + client.register(); + expect(JSON.parse(accumulator.body)).to.deep.equal({ + instance: { + app: 'app', + hostName: 'myhost', + dataCenterInfo: { name: 'MyOwn' }, + port: 9999, + status: 'UP', + vipAddress: '1.2.2.3', + }, + }); + requestStub.restore(); + }); + + it('should throw error for non-204 response', () => { + const callbacks = []; + const requestStub = sinon.stub(https, 'request').yields({ + on: () => {}, + statusCode: 500, + }).returns({ + on: (type, callback) => { callbacks[type] = callback; }, + end: () => { callbacks.error.apply(); }, + write: () => {}, + }); + + const registerCb = sinon.spy(); + client.register(registerCb); + + expect(registerCb).to.have.been.calledWithMatch({ + message: 'eureka registration FAILED: status: 500 body: null', + }); + requestStub.restore(); + }); + + it('should throw error for request error', () => { + const callbacks = []; + const requestStub = sinon.stub(https, 'request').returns({ + on: (type, callback) => { callbacks[type] = callback; }, + write: () => {}, + end: () => {}, + }); + const registerCb = sinon.spy(); + client.register(registerCb); + callbacks.error(new Error('request error')); + + expect(registerCb).to.have.been.calledWithMatch({ message: 'request error' }); + requestStub.restore(); + }); + }); + + describe('deregister()', () => { + let config; + let client; + beforeEach(() => { + config = makeConfig(); + client = new Eureka(config); + }); + + it('should should trigger deregister event', () => { + const requestStub = mockSuccessfulResponse(); + + const eventSpy = sinon.spy(); + client.on('deregistered', eventSpy); + client.register(); + client.deregister(); + + requestStub.restore(); + }); + + it('should call deregister URI', () => { + const requestStub = mockSuccessfulResponse(); + client.deregister(); + + const options = requestStub.resolvesArg(0).args[0][0]; + expect(options.method).to.be.equal('DELETE'); + expect(options.hostname).to.be.equal('127.0.0.1'); + expect(options.port).to.be.equal('9999'); + expect(options.path).to.be.equal('/eureka/v2/apps/app/myhost'); + + requestStub.restore(); + }); + + it('should throw error for non-200 response', () => { + const callbacks = []; + const requestStub = sinon.stub(https, 'request').yields({ + on: () => {}, + statusCode: 500, + }).returns({ + on: (type, callback) => { callbacks[type] = callback; }, + end: () => { callbacks.error.apply(); }, + write: () => {}, + }); + + const deregisterCb = sinon.spy(); + client.deregister(deregisterCb); + + expect(deregisterCb).to.have.been.calledWithMatch({ + message: 'eureka deregistration FAILED: status: 500 body: null', + }); + requestStub.restore(); + }); + + it('should throw error for request error', () => { + const callbacks = []; + const requestStub = sinon.stub(https, 'request').returns({ + on: (type, callback) => { callbacks[type] = callback; }, + write: () => {}, + end: () => {}, + }); + const deregisterCb = sinon.spy(); + client.deregister(deregisterCb); + callbacks.error(new Error('request error')); + + expect(deregisterCb).to.have.been.calledWithMatch({ message: 'request error' }); + requestStub.restore(); + }); + }); + + describe('renew()', () => { + let config; + let client; + beforeEach(() => { + config = makeConfig(); + client = new Eureka(config); + }); + + it('should call heartbeat URI', () => { + const requestStub = mockSuccessfulResponse(); + client.renew(); + + const options = requestStub.resolvesArg(0).args[0][0]; + expect(options.method).to.be.equal('PUT'); + expect(options.hostname).to.be.equal('127.0.0.1'); + expect(options.port).to.be.equal('9999'); + expect(options.path).to.be.equal('/eureka/v2/apps/app/myhost'); + + requestStub.restore(); + }); + + it('should trigger a heartbeat event', (done) => { + const requestStub = mockSuccessfulResponse({}, 200); + client.on('heartbeat', () => { + requestStub.restore(); + done(); + }); + client.renew(); + }); + + it('should re-register on 404', (done) => { + const requestStub = sinon.stub(https, 'request'); + + client.on('registered', () => { + const postOptions = requestStub.resolvesArg(0).args[1][0]; + expect(postOptions.method).to.be.equal('POST'); + expect(postOptions.hostname).to.be.equal('127.0.0.1'); + expect(postOptions.port).to.be.equal('9999'); + expect(postOptions.path).to.be.equal('/eureka/v2/apps/app'); + + const putOptions = requestStub.resolvesArg(0).args[0][0]; + expect(putOptions.method).to.be.equal('PUT'); + expect(putOptions.hostname).to.be.equal('127.0.0.1'); + expect(putOptions.port).to.be.equal('9999'); + expect(putOptions.path).to.be.equal('/eureka/v2/apps/app/myhost'); + + requestStub.restore(); + done(); + }); + + const callbacks = []; + const req = { + end: () => {}, + write: () => {}, + on: (type, callback) => { + if (!callbacks[type]) callbacks[type] = callback; + }, + }; + requestStub.yields({ + statusCode: 404, + on: (type, callback) => { + if (!callbacks[type]) callbacks[type] = callback; + }, + }).returns(req); + + client.renew(); + + requestStub.yields({ + statusCode: 204, + on: () => {}, + }).returns(req); + callbacks.end.apply(); + }); + }); + + describe('eureka-client.yml', () => { + let stub; + let original; + before(() => { + original = `${process.cwd()}/test`; + stub = sinon.stub(process, 'cwd').returns(original); + }); + + after(() => { + stub.restore(); + }); + + it('should load the correct', () => { + const client = new Eureka(makeConfig()); + expect(client.config.eureka.custom).to.equal('test'); + }); + + it('should load the environment overrides', () => { + const client = new Eureka(makeConfig()); + expect(client.config.eureka.otherCustom).to.equal('test2'); + expect(client.config.eureka.overrides).to.equal(2); + }); + + it('should support a `cwd` and `filename` property', () => { + const client = new Eureka(makeConfig({ + cwd: join(original, 'fixtures'), + filename: 'config', + })); + expect(client.config.eureka.fromFixture).to.equal(true); + }); + + it('should throw error on malformed config file', () => { + function malformed() { + return new Eureka(makeConfig({ + cwd: join(__dirname, 'fixtures'), + filename: 'malformed-config', + })); + } + expect(malformed).to.throw(Error); + }); + it('should not throw error on malformed config file', () => { + function missingFile() { + return new Eureka(makeConfig({ + cwd: join(original, 'fixtures'), + filename: 'missing-config', + })); + } + expect(missingFile).to.not.throw(); + }); + }); + + describe('validateConfig()', () => { + let config; + beforeEach(() => { + config = makeConfig({ + instance: { dataCenterInfo: { name: 'Amazon' } }, + }); + }); + + it('should throw an exception with a missing instance.app', () => { + function badConfig() { + delete config.instance.app; + return new Eureka(config); + } + expect(badConfig).to.throw(TypeError); + }); + + it('should throw an exception with a missing instance.vipAddress', () => { + function badConfig() { + delete config.instance.vipAddress; + return new Eureka(config); + } + expect(badConfig).to.throw(TypeError); + }); + + it('should throw an exception with a missing instance.port', () => { + function badConfig() { + delete config.instance.port; + return new Eureka(config); + } + expect(badConfig).to.throw(TypeError); + }); + + it('should throw an exception with a missing instance.dataCenterInfo', () => { + function badConfig() { + delete config.instance.dataCenterInfo; + return new Eureka(config); + } + expect(badConfig).to.throw(TypeError); + }); + + it('should throw an exception with an invalid request middleware', () => { + function badConfig() { + config.requestMiddleware = 'invalid middleware'; + return new Eureka(config); + } + expect(badConfig).to.throw(TypeError); + }); + }); + + describe('getInstancesByAppId()', () => { + let client; + let config; + beforeEach(() => { + config = makeConfig(); + client = new Eureka(config); + }); + + it('should throw an exception if no appId is provided', () => { + function noAppId() { + client.getInstancesByAppId(); + } + expect(noAppId).to.throw(Error); + }); + + it('should return a list of instances if appId is registered', () => { + const appId = 'THESERVICENAME'; + const expectedInstances = [{ host: '127.0.0.1' }]; + client.cache.app[appId] = expectedInstances; + const actualInstances = client.getInstancesByAppId(appId); + expect(actualInstances).to.equal(expectedInstances); + }); + + it('should return empty array if no instances were found for given appId', () => { + expect(client.getInstancesByAppId('THESERVICENAME')).to.deep.equal([]); + }); + }); + + describe('getInstancesByVipAddress()', () => { + let client; + let config; + beforeEach(() => { + config = makeConfig(); + client = new Eureka(config); + }); + + it('should throw an exception if no vipAddress is provided', () => { + function noVipAddress() { + client.getInstancesByVipAddress(); + } + expect(noVipAddress).to.throw(Error); + }); + + it('should return a list of instances if vipAddress is registered', () => { + const vipAddress = 'the.vip.address'; + const expectedInstances = [{ host: '127.0.0.1' }]; + client.cache.vip[vipAddress] = expectedInstances; + const actualInstances = client.getInstancesByVipAddress(vipAddress); + expect(actualInstances).to.equal(expectedInstances); + }); + + it('should return empty array if no instances were found for given vipAddress', () => { + expect(client.getInstancesByVipAddress('the.vip.address')).to.deep.equal([]); + }); + }); + + describe('fetchRegistry()', () => { + let config; + let client; + beforeEach(() => { + config = makeConfig(); + client = new Eureka(config); + sinon.stub(client, 'transformRegistry'); + sinon.stub(client, 'handleDelta'); + }); + + afterEach(() => { + client.transformRegistry.restore(); + client.handleDelta.restore(); + }); + + it('should should trigger registryUpdated event', (done) => { + const requestStub = mockSuccessfulResponse({}, 200); + client.on('registryUpdated', () => { + requestStub.restore(); + done(); + }); + client.fetchRegistry(); + }); + + it('should call registry URI', (done) => { + const requestStub = mockSuccessfulResponse({}, 200); + + client.fetchRegistry(() => { + const options = requestStub.resolvesArg(0).args[0][0]; + expect(options.method).to.be.equal('GET'); + expect(options.hostname).to.be.equal('127.0.0.1'); + expect(options.port).to.be.equal('9999'); + expect(options.path).to.be.equal('/eureka/v2/apps/'); + requestStub.restore(); + done(); + }); + }); + + it('should call registry URI for delta', (done) => { + const requestStub = mockSuccessfulResponse(); + client.config.shouldUseDelta = true; + client.hasFullRegistry = true; + client.fetchRegistry(() => { + const options = requestStub.resolvesArg(0).args[0][0]; + expect(options.method).to.be.equal('GET'); + expect(options.hostname).to.be.equal('127.0.0.1'); + expect(options.port).to.be.equal('9999'); + expect(options.path).to.be.equal('/eureka/v2/apps/delta'); + requestStub.restore(); + done(); + }); + }); + + it('should throw error for non-200 response', (done) => { + const requestStub = mockSuccessfulResponse({}, 500); + client.fetchRegistry((msg) => { + expect(msg.message).to.be.equal('Unable to retrieve full registry from Eureka server'); + requestStub.restore(); + done(); + }); + }); + + it('should throw error for non-200 response for delta', (done) => { + const requestStub = mockSuccessfulResponse({}, 500); + client.config.shouldUseDelta = true; + client.hasFullRegistry = true; + client.fetchRegistry((msg) => { + expect(msg.message).to.be.equal('Unable to retrieve delta registry from Eureka server'); + requestStub.restore(); + done(); + }); + }); + + it('should throw error for request error', (done) => { + const callbacks = []; + const requestStub = sinon.stub(https, 'request').returns({ + on: (type, callback) => { callbacks[type] = callback; }, + write: () => {}, + end: () => {}, + }); + client.fetchRegistry((msg) => { + expect(msg.message).to.be.equal('request error'); + requestStub.restore(); + done(); + }); + callbacks.error(new Error('request error')); + }); + + it('should throw error for request error for delta request', (done) => { + const callbacks = []; + const requestStub = sinon.stub(https, 'request').returns({ + on: (type, callback) => { callbacks[type] = callback; }, + write: () => {}, + end: () => {}, + }); + client.config.shouldUseDelta = true; + client.hasFullRegistry = true; + client.fetchRegistry((msg) => { + expect(msg.message).to.be.equal('request error'); + requestStub.restore(); + done(); + }); + callbacks.error(new Error('request error')); + }); + + it('should throw error on invalid JSON', (done) => { + const callbacks = []; + const requestStub = sinon.stub(https, 'request').yields({ + statusCode: 200, + on: (type, callback) => { callbacks[type] = callback; }, + }).returns({ + on: () => {}, + end: () => { + callbacks.data('{ blah'); + callbacks.end.apply(); + }, + }); + + client.fetchRegistry(error => { + expect(error instanceof SyntaxError).to.be.true; + requestStub.restore(); + done(); + }); + }); + + it('should throw error on invalid JSON for delta request', (done) => { + const callbacks = []; + const requestStub = sinon.stub(https, 'request').yields({ + statusCode: 200, + on: (type, callback) => { callbacks[type] = callback; }, + }).returns({ + on: () => {}, + end: () => { + callbacks.data('{ blah'); + callbacks.end.apply(); + }, + }); + + client.config.shouldUseDelta = true; + client.hasFullRegistry = true; + client.fetchRegistry(error => { + expect(error instanceof SyntaxError).to.be.true; + requestStub.restore(); + done(); + }); + }); + }); + + describe('transformRegistry()', () => { + let client; + let config; + let registry; + let instance1; + let instance2; + let instance3; + let instance4; + let instance5; + let app1; + let app2; + let app3; + beforeEach(() => { + config = makeConfig(); + registry = { + applications: { application: {} }, + }; + instance1 = { hostName: '127.0.0.1', port: { $: 1000 }, app: 'theapp', vipAddress: 'vip1', status: 'UP' }; + instance2 = { hostName: '127.0.0.2', port: { $: 2000 }, app: 'theapptwo', vipAddress: 'vip2', status: 'UP' }; + instance3 = { hostName: '127.0.0.3', port: { $: 2000 }, app: 'theapp', vipAddress: 'vip2', status: 'UP' }; + instance4 = { hostName: '127.0.0.4', port: { $: 2000 }, app: 'theappthree', vipAddress: 'vip3', status: 'UP' }; + instance5 = { hostName: '127.0.0.5', port: { $: 2000 }, app: 'theappthree', vipAddress: 'vip2', status: 'UP' }; + + app1 = { name: 'theapp', instance: instance1 }; + app2 = { name: 'theapptwo', instance: [instance2, instance3] }; + app3 = { name: 'theappthree', instance: [instance5, instance4] }; + client = new Eureka(config); + }); + + it('should noop if empty registry', () => { + client.transformRegistry(undefined); + expect(client.cache.vip).to.be.empty; + expect(client.cache.app).to.be.empty; + }); + + it('should return clear the cache if no applications exist', () => { + registry.applications.application = null; + client.transformRegistry(registry); + expect(client.cache.vip).to.be.empty; + expect(client.cache.app).to.be.empty; + }); + + it('should transform a registry with one app', () => { + registry.applications.application = app1; + client.transformRegistry(registry); + expect(client.cache.app[app1.name.toUpperCase()].length).to.equal(1); + expect(client.cache.vip[instance1.vipAddress].length).to.equal(1); + }); + + it('should transform a registry with two or more apps', () => { + registry.applications.application = [app1, app2]; + client.transformRegistry(registry); + expect(client.cache.app[app1.name.toUpperCase()].length).to.equal(2); + expect(client.cache.vip[instance2.vipAddress].length).to.equal(2); + }); + + it('should transform a registry with a single application with multiple vips', () => { + registry.applications.application = [app3]; + client.transformRegistry(registry); + expect(client.cache.app[app3.name.toUpperCase()].length).to.equal(2); + expect(client.cache.vip[instance5.vipAddress].length).to.equal(1); + expect(client.cache.vip[instance4.vipAddress].length).to.equal(1); + }); + }); + + describe('transformApp()', () => { + let client; + let config; + let app; + let instance1; + let instance2; + let instance3; + let instance4; + let downInstance; + let theVip; + let multiVip; + let cache; + beforeEach(() => { + config = makeConfig({ + instance: { dataCenterInfo: { name: 'Amazon' } }, + }); + client = new Eureka(config); + theVip = 'theVip'; + multiVip = 'fooVip,barVip'; + instance1 = { hostName: '127.0.0.1', port: 1000, vipAddress: theVip, app: 'theapp', status: 'UP' }; + instance2 = { hostName: '127.0.0.2', port: 2000, vipAddress: theVip, app: 'theapp', status: 'UP' }; + instance3 = { hostName: '127.0.0.5', port: 2000, vipAddress: multiVip, app: 'theapp', status: 'UP' }; + instance4 = { hostName: '127.0.0.6', port: 2000, vipAddress: void 0, app: 'theapp', status: 'UP' }; + downInstance = { hostName: '127.0.0.7', port: 2000, app: 'theapp', vipAddress: theVip, status: 'DOWN' }; + app = { name: 'theapp' }; + cache = { app: {}, vip: {} }; + }); + + it('should transform an app with one instance', () => { + app.instance = instance1; + client.transformApp(app, cache); + expect(cache.app[app.name.toUpperCase()].length).to.equal(1); + expect(cache.vip[theVip].length).to.equal(1); + }); + + it('should transform an app with one instance that has a comma separated vipAddress', () => { + app.instance = instance3; + client.transformApp(app, cache); + expect(cache.app[app.name.toUpperCase()].length).to.equal(1); + expect(cache.vip[multiVip.split(',')[0]].length).to.equal(1); + expect(cache.vip[multiVip.split(',')[1]].length).to.equal(1); + }); + + it('should transform an app with one instance that has no vipAddress', () => { + app.instance = instance4; + client.transformApp(app, cache); + expect(cache.app[app.name.toUpperCase()].length).to.equal(1); + expect(Object.keys(cache.vip).length).to.equal(0); + }); + + it('should transform an app with two or more instances', () => { + app.instance = [instance1, instance2, instance3]; + client.transformApp(app, cache); + expect(cache.app[app.name.toUpperCase()].length).to.equal(3); + expect(cache.vip[theVip].length).to.equal(2); + expect(cache.vip[multiVip.split(',')[0]].length).to.equal(1); + expect(cache.vip[multiVip.split(',')[1]].length).to.equal(1); + }); + + it('should filter UP instances by default', () => { + app.instance = [instance1, instance2, downInstance]; + client.transformApp(app, cache); + expect(cache.app[app.name.toUpperCase()].length).to.equal(2); + expect(cache.vip[theVip].length).to.equal(2); + }); + + it('should not filter UP instances when filterUpInstances === false', () => { + config = makeConfig({ + instance: { dataCenterInfo: { name: 'Amazon' } }, + eureka: { filterUpInstances: false }, + }); + client = new Eureka(config); + app.instance = [instance1, instance2, downInstance]; + client.transformApp(app, cache); + expect(cache.app[app.name.toUpperCase()].length).to.equal(3); + expect(cache.vip[theVip].length).to.equal(3); + }); + }); + + describe('addInstanceMetadata()', () => { + let client; + let config; + let instanceConfig; + let awsMetadata; + let metadataSpy; + beforeEach(() => { + instanceConfig = { + app: 'app', + vipAddress: '1.2.3.4', + port: 9999, + dataCenterInfo: { name: 'Amazon' }, + statusPageUrl: 'http://__HOST__:8080/info', + healthCheckUrl: 'http://__HOST__:8077/healthcheck', + homePageUrl: 'http://__HOST__:8080/', + }; + awsMetadata = { + 'public-hostname': 'ec2-127-0-0-1.us-fake-1.mydomain.com', + 'public-ipv4': '54.54.54.54', + 'local-hostname': 'fake-1', + 'local-ipv4': '10.0.1.1', + }; + }); + + afterEach(() => { + client.metadataClient.fetchMetadata.restore(); + }); + + it('should update hosts with AWS metadata public host', () => { + // Setup + config = { + instance: instanceConfig, + eureka: { host: '127.0.0.1', port: 9999 }, + }; + client = new Eureka(config); + metadataSpy = sinon.spy(); + + sinon.stub(client.metadataClient, 'fetchMetadata').yields(awsMetadata); + + // Act + client.addInstanceMetadata(metadataSpy); + expect(client.config.instance.hostName).to.equal('ec2-127-0-0-1.us-fake-1.mydomain.com'); + expect(client.config.instance.ipAddr).to.equal('54.54.54.54'); + expect(client.config.instance.statusPageUrl).to.equal('http://ec2-127-0-0-1.us-fake-1.mydomain.com:8080/info'); + expect(client.config.instance.healthCheckUrl).to.equal('http://ec2-127-0-0-1.us-fake-1.mydomain.com:8077/healthcheck'); + expect(client.config.instance.homePageUrl).to.equal('http://ec2-127-0-0-1.us-fake-1.mydomain.com:8080/'); + }); + + it('should update hosts with AWS metadata public IP when preferIpAddress === true', () => { + // Setup + config = { + instance: instanceConfig, + eureka: { host: '127.0.0.1', port: 9999, preferIpAddress: true }, + }; + client = new Eureka(config); + metadataSpy = sinon.spy(); + + sinon.stub(client.metadataClient, 'fetchMetadata').yields(awsMetadata); + + // Act + client.addInstanceMetadata(metadataSpy); + expect(client.config.instance.hostName).to.equal('54.54.54.54'); + expect(client.config.instance.ipAddr).to.equal('54.54.54.54'); + expect(client.config.instance.statusPageUrl).to.equal('http://54.54.54.54:8080/info'); + expect(client.config.instance.healthCheckUrl).to.equal('http://54.54.54.54:8077/healthcheck'); + expect(client.config.instance.homePageUrl).to.equal('http://54.54.54.54:8080/'); + }); + + it('should update hosts with AWS metadata local host if useLocalMetadata === true', () => { + // Setup + config = { + instance: instanceConfig, + eureka: { host: '127.0.0.1', port: 9999, useLocalMetadata: true }, + }; + client = new Eureka(config); + metadataSpy = sinon.spy(); + + sinon.stub(client.metadataClient, 'fetchMetadata').yields(awsMetadata); + + // Act + client.addInstanceMetadata(metadataSpy); + expect(client.config.instance.hostName).to.equal('fake-1'); + expect(client.config.instance.ipAddr).to.equal('10.0.1.1'); + expect(client.config.instance.statusPageUrl).to.equal('http://fake-1:8080/info'); + expect(client.config.instance.healthCheckUrl).to.equal('http://fake-1:8077/healthcheck'); + expect(client.config.instance.homePageUrl).to.equal('http://fake-1:8080/'); + }); + + it('should update hosts with AWS metadata local IP if useLocalMetadata === true' + + ' and preferIpAddress === true', () => { + // Setup + config = { + instance: instanceConfig, + eureka: { host: '127.0.0.1', port: 9999, useLocalMetadata: true, preferIpAddress: true }, + }; + client = new Eureka(config); + metadataSpy = sinon.spy(); + + sinon.stub(client.metadataClient, 'fetchMetadata').yields(awsMetadata); + + // Act + client.addInstanceMetadata(metadataSpy); + expect(client.config.instance.hostName).to.equal('10.0.1.1'); + expect(client.config.instance.ipAddr).to.equal('10.0.1.1'); + expect(client.config.instance.statusPageUrl).to.equal('http://10.0.1.1:8080/info'); + expect(client.config.instance.healthCheckUrl).to.equal('http://10.0.1.1:8077/healthcheck'); + expect(client.config.instance.homePageUrl).to.equal('http://10.0.1.1:8080/'); + }); + }); + + describe('eurekaRequest()', () => { + it('should call requestMiddleware with request options', () => { + const overrides = { + requestMiddleware: sinon.spy((opts, done) => done(opts)), + }; + const requestStub = mockSuccessfulResponse({}, 200); + const config = makeConfig(overrides); + const client = new Eureka(config); + client.eurekaRequest({}, (error) => { + expect(Boolean(error)).to.equal(false); + expect(overrides.requestMiddleware).to.be.calledOnce; + expect(overrides.requestMiddleware.args[0][0]).to.be.an('object'); + }); + requestStub.restore(); + }); + it('should catch an error in requestMiddleware', () => { + const overrides = { + requestMiddleware: sinon.spy((opts, done) => { + done(); + }), + }; + const requestStub = mockSuccessfulResponse({}, 200); + const config = makeConfig(overrides); + const client = new Eureka(config); + client.eurekaRequest({}, (error) => { + expect(overrides.requestMiddleware).to.be.calledOnce; + expect(error).to.be.an('error'); + }); + requestStub.restore(); + }); + it('should check the returnType of requestMiddleware', () => { + const overrides = { + requestMiddleware: sinon.spy((opts, done) => done('foo')), + }; + const requestStub = mockSuccessfulResponse({}, 200); + const config = makeConfig(overrides); + const client = new Eureka(config); + client.eurekaRequest({}, (error) => { + expect(error).to.be.an('error'); + expect(error.message).to.equal('requestMiddleware did not return an object'); + }); + requestStub.restore(); + }); + + it('should retry next server on request failure', (done) => { + const overrides = { + eureka: { + serviceUrls: { + default: ['http://serverA', 'http://serverB'], + }, + maxRetries: 3, + requestRetryDelay: 0, + }, + }; + const config = makeConfig(overrides); + const client = new Eureka(config); + const callbacks = []; + const requestStub = sinon.stub(https, 'request'); + const req = { + write: () => {}, + on: (type, callback) => { + if (!callbacks[type]) callbacks[type] = []; + callbacks[type].push(callback); + }, + end: () => {}, + }; + requestStub.yields({ + statusCode: 500, + on: (type, callback) => { + callbacks[type] = [callback]; + }, + }).returns(req); + + client.eurekaRequest({ uri: '/path' }, (error) => { + expect(error).to.be.null; + expect(requestStub.args[0][0].hostname).to.be.equal('servera'); + expect(requestStub.args[1][0].hostname).to.be.equal('serverb'); + done(); + }); + + requestStub.yields({ + statusCode: 200, + on: (type, callback) => { + callbacks[type].push(callback); + req.end = callbacks.end[1]; + }, + }).returns(req); + callbacks.end[0].apply(); + }); + }); + + + describe('handleDelta()', () => { + let client; + beforeEach(() => { + const config = makeConfig({ shouldUseDelta: true }); + client = new Eureka(config); + }); + + it('should add instances', () => { + const appDelta = [ + { + instance: [ + { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'ADDED' }, + ], + }, + ]; + + client.handleDelta(client.cache, appDelta); + expect(client.cache.vip.thevip).to.have.length(1); + expect(client.cache.app.THEAPP).to.have.length(1); + }); + + it('should handle duplicate instances on add', () => { + const appDelta = [ + { + instance: [ + { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'ADDED' }, + { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'ADDED' }, + ], + }, + ]; + + client.handleDelta(client.cache, appDelta); + expect(client.cache.vip.thevip).to.have.length(1); + expect(client.cache.app.THEAPP).to.have.length(1); + }); + + it('should modify instances', () => { + const appDelta = [ + { + instance: [ + { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'MODIFIED', newProp: 'foo' }, + ], + }, + ]; + const original = { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'MODIFIED' }; + client.cache = { + app: { THEAPP: [original] }, + vip: { thevip: [original] }, + }; + + client.handleDelta(client.cache, appDelta); + expect(client.cache.vip.thevip).to.have.length(1); + expect(client.cache.app.THEAPP).to.have.length(1); + expect(client.cache.vip.thevip[0]).to.have.property('newProp'); + expect(client.cache.app.THEAPP[0]).to.have.property('newProp'); + }); + + it('should modify instances even when status is not UP', () => { + const appDelta = [ + { + instance: [ + { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'DOWN', actionType: 'MODIFIED', newProp: 'foo' }, + ], + }, + ]; + const original = { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'MODIFIED' }; + client.cache = { + app: { THEAPP: [original] }, + vip: { thevip: [original] }, + }; + + client.handleDelta(client.cache, appDelta); + expect(client.cache.vip.thevip).to.have.length(1); + expect(client.cache.app.THEAPP).to.have.length(1); + expect(client.cache.vip.thevip[0]).to.have.property('newProp'); + expect(client.cache.app.THEAPP[0]).to.have.property('newProp'); + }); + + it('should add if instance doesnt exist when modifying', () => { + const appDelta = [ + { + instance: [ + { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'MODIFIED', newProp: 'foo' }, + ], + }, + ]; + + client.handleDelta(client.cache, appDelta); + expect(client.cache.vip.thevip).to.have.length(1); + expect(client.cache.app.THEAPP).to.have.length(1); + expect(client.cache.vip.thevip[0]).to.have.property('newProp'); + expect(client.cache.app.THEAPP[0]).to.have.property('newProp'); + }); + + it('should delete instances', () => { + const appDelta = [ + { + instance: [ + { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'DELETED', newProp: 'foo' }, + ], + }, + ]; + const original = { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'ADDED' }; + client.cache = { + app: { THEAPP: [original] }, + vip: { thevip: [original] }, + }; + + client.handleDelta(client.cache, appDelta); + expect(client.cache.vip.thevip).to.have.length(0); + expect(client.cache.app.THEAPP).to.have.length(0); + }); + + it('should not delete instances if they do not exist', () => { + const appDelta = [ + { + instance: [ + { hostName: '127.0.0.1', port: { $: 1000 }, app: 'THEAPP', vipAddress: 'thevip', status: 'UP', actionType: 'DELETED', newProp: 'foo' }, + ], + }, + ]; + client.cache = { + app: { THEAPP: [] }, + vip: { thevip: [] }, + }; + + client.handleDelta(client.cache, appDelta); + expect(client.cache.vip.thevip).to.have.length(0); + expect(client.cache.app.THEAPP).to.have.length(0); + }); + }); +}); diff --git a/onboarding-enabler-nodejs/test/Logger.test.js b/onboarding-enabler-nodejs/test/Logger.test.js new file mode 100644 index 0000000000..eece6bdd67 --- /dev/null +++ b/onboarding-enabler-nodejs/test/Logger.test.js @@ -0,0 +1,123 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import sinon from 'sinon'; +import { expect } from 'chai'; +import Logger from '../src/Logger.js'; + +const DEFAULT_LEVEL = 30; + +describe('Logger', () => { + it('should construct with no args', () => { + expect(() => new Logger()).to.not.throw(); + }); + + describe('Logger Instance', () => { + let logger; + beforeEach(() => { + logger = new Logger(); + }); + + it('should return the current log level from the "level" method', () => { + expect(logger.level()).to.equal(DEFAULT_LEVEL); + }); + + it('should update the log level if passed a number', () => { + logger.level(100); + expect(logger.level()).to.equal(100); + logger.level(15); + expect(logger.level()).to.equal(15); + }); + + it('should update the log level if a valid string is passed', () => { + logger.level('warn'); + expect(logger.level()).to.equal(40); + logger.level('error'); + expect(logger.level()).to.equal(50); + }); + + it('should use the default log level is an invalid string is passed', () => { + logger.level('invalid'); + expect(logger.level()).to.equal(DEFAULT_LEVEL); + }); + + it('should only log a message if the log level is higher than the level', () => { + logger.level(100); + const stub = sinon.stub(console, 'error'); + logger.error('Some Error'); + expect(stub.callCount).to.equal(0); + logger.level(50); + logger.error('Other Error'); + expect(stub.callCount).to.equal(1); + stub.restore(); + }); + + describe('Log Methods', () => { + beforeEach(() => { + // Log everything: + logger.level(-1); + }); + + const stubConsole = method => sinon.stub(console, method); + + it('should call console.log with debug', () => { + const stub = stubConsole('log'); + logger.debug('test'); + expect(stub.callCount).to.equal(1); + stub.restore(); + }); + + it('should call console.info with info', () => { + const stub = stubConsole('info'); + logger.info('test'); + expect(stub.callCount).to.equal(1); + stub.restore(); + }); + + it('should call console.warn with warn', () => { + const stub = stubConsole('warn'); + logger.warn('test'); + expect(stub.callCount).to.equal(1); + stub.restore(); + }); + + it('should call console.error with error', () => { + const stub = stubConsole('error'); + logger.error('test'); + expect(stub.callCount).to.equal(1); + stub.restore(); + }); + }); + }); +}); diff --git a/onboarding-enabler-nodejs/test/deltaUtil.test.js b/onboarding-enabler-nodejs/test/deltaUtil.test.js new file mode 100644 index 0000000000..4087a947ff --- /dev/null +++ b/onboarding-enabler-nodejs/test/deltaUtil.test.js @@ -0,0 +1,73 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import { expect } from 'chai'; +import { arrayOrObj, findInstance, normalizeDelta } from '../src/deltaUtils.js'; + +describe('deltaUtils', () => { + describe('arrayOrObj', () => { + it('should return same array if passed an array', () => { + const arr = ['foo']; + expect(arrayOrObj(arr)).to.equal(arr); + }); + it('should return an array containing obj', () => { + const obj = {}; + expect(arrayOrObj(obj)[0]).to.equal(obj); + }); + }); + describe('findInstance', () => { + it('should return true if objects match', () => { + const obj1 = { hostName: 'foo', port: { $: '6969' } }; + const obj2 = { hostName: 'foo', port: { $: '6969' } }; + expect(findInstance(obj1)(obj2)).to.equal(true); + }); + it('should return false if objects do not match', () => { + const obj1 = { hostName: 'foo', port: { $: '6969' } }; + const obj2 = { hostName: 'bar', port: { $: '1111' } }; + expect(findInstance(obj1)(obj2)).to.equal(false); + }); + }); + describe('normalizeDelta', () => { + it('should normalize nested objs to arrays', () => { + const delta = { + instance: { + hostName: 'foo', port: { $: '6969' }, + }, + }; + const normalized = normalizeDelta(delta); + expect(normalized).to.be.an('array'); + expect(normalized[0].instance).to.be.an('array'); + }); + }); +}); diff --git a/onboarding-enabler-nodejs/test/eureka-client-test.yml b/onboarding-enabler-nodejs/test/eureka-client-test.yml new file mode 100644 index 0000000000..0a3bf6a45a --- /dev/null +++ b/onboarding-enabler-nodejs/test/eureka-client-test.yml @@ -0,0 +1,3 @@ +eureka: + overrides: 2 + otherCustom: 'test2' diff --git a/onboarding-enabler-nodejs/test/eureka-client.yml b/onboarding-enabler-nodejs/test/eureka-client.yml new file mode 100644 index 0000000000..d48dd85e1a --- /dev/null +++ b/onboarding-enabler-nodejs/test/eureka-client.yml @@ -0,0 +1,11 @@ +eureka: + overrides: 1 + custom: 'test' + heartbeatInterval: 999 + registryFetchInterval: 999 + fetchRegistry: false + servicePath: '/eureka/v2/apps/' + ssl: false + useDns: false + fetchMetadata: false +instance: {} diff --git a/onboarding-enabler-nodejs/test/fixtures/config.yml b/onboarding-enabler-nodejs/test/fixtures/config.yml new file mode 100644 index 0000000000..33991b729e --- /dev/null +++ b/onboarding-enabler-nodejs/test/fixtures/config.yml @@ -0,0 +1,2 @@ +eureka: + fromFixture: true diff --git a/onboarding-enabler-nodejs/test/fixtures/malformed-config.yml b/onboarding-enabler-nodejs/test/fixtures/malformed-config.yml new file mode 100644 index 0000000000..4cedf36b95 --- /dev/null +++ b/onboarding-enabler-nodejs/test/fixtures/malformed-config.yml @@ -0,0 +1,3 @@ +eureka: + fromFixture: true + @something: false diff --git a/onboarding-enabler-nodejs/test/integration.test.js b/onboarding-enabler-nodejs/test/integration.test.js new file mode 100644 index 0000000000..325f784f5e --- /dev/null +++ b/onboarding-enabler-nodejs/test/integration.test.js @@ -0,0 +1,102 @@ +/* + * This program and the accompanying materials are made available under the terms of the + * Eclipse Public License v2.0 which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-v20.html + * + * SPDX-License-Identifier: EPL-2.0 + * + * Copyright Contributors to the Zowe Project. + */ + +/** + * The MIT License (MIT) + * + * Copyright (c) 2015 Jacob Quatier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +import Eureka from '../src/EurekaClient.js'; +import { expect } from 'chai'; +import fs from 'fs'; + +describe('Integration Test', () => { + const config = { + instance: { + app: 'jqservice', + hostName: 'localhost', + ipAddr: '127.0.0.1', + port: { + $: 8080, + '@enabled': true, + }, + vipAddress: 'jq.test.something.com', + instanceId: 'localhost:hwexpress:8080', + dataCenterInfo: { + '@class': 'com.netflix.appinfo.InstanceInfo$DefaultDataCenterInfo', + name: 'MyOwn', + }, + }, + eureka: { + heartbeatInterval: 30000, + registryFetchInterval: 5000, + fetchRegistry: true, + waitForRegistry: true, + servicePath: '/eureka/v2/apps/', + ssl: true, + useDns: false, + fetchMetadata: true, + host: 'localhost', + port: 10011, + }, + ssl: { + certificate: '../keystore/localhost/localhost.keystore.cer', + keystore: '../keystore/localhost/localhost.keystore.key', + caFile: '../keystore/localhost/localhost.pem', + keyPassword: 'password', + }, + requestMiddleware: (requestOpts, done) => { + done(Object.assign(requestOpts, { + cert: fs.readFileSync(config.ssl.certificate), + key: fs.readFileSync(config.ssl.keystore), + passphrase: config.ssl.keyPassword, + ca: fs.readFileSync(config.ssl.caFile), + })); + }, + }; + + const client = new Eureka(config); + before((done) => { + client.start(done); + }); + + it('should be able to get instance by the app id', () => { + const instances = client.getInstancesByAppId(config.instance.app); + expect(instances.length).to.equal(1); + }); + + it('should be able to get instance by the vipAddress', () => { + const instances = client.getInstancesByVipAddress(config.instance.vipAddress); + expect(instances.length).to.equal(1); + }); + + after((done) => { + client.stop(done); + }); +});