diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..2f9a4ff3 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,2 @@ +/lib/** +*.d.ts diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..efd27ab9 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,116 @@ +{ + "parser": "@typescript-eslint/parser", + "parserOptions": { + "warnOnUnsupportedTypeScriptVersion": false, + "ecmaVersion": 6, + "sourceType": "module", + "project": "tsconfig.json" + }, + "env": { + "browser": false, + "node": true, + "es6": true + }, + "plugins": [ + "@typescript-eslint", "jsdoc", "no-null", "import" + ], + "rules": { + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/array-type": ["error", { "default": "array" }], + "@typescript-eslint/await-thenable": "error", + + "camelcase": "off", + "@typescript-eslint/camelcase": ["error", { "properties": "never", "allow": ["^[A-Za-z][a-zA-Za-z]+_[A-Za-z]+$"] }], + + "@typescript-eslint/class-name-casing": "error", + "@typescript-eslint/consistent-type-definitions": ["error", "interface"], + "@typescript-eslint/consistent-type-assertions": ["error", { "assertionStyle": "as"}], + "@typescript-eslint/explicit-function-return-type": ["error"], + "@typescript-eslint/interface-name-prefix": "error", + "@typescript-eslint/no-extra-parens": ["error", "all", { + "returnAssign": false, + "nestedBinaryExpressions": false, + "enforceForArrowConditionals": false + }], + "@typescript-eslint/no-extra-semi": "error", + "@typescript-eslint/no-floating-promises": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-type-assertion": ["error", { "typesToIgnore": [] }], + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/prefer-function-type": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-optional-chain": "error", + + "quotes": "off", + "@typescript-eslint/quotes": ["error", "single", { "avoidEscape": true, "allowTemplateLiterals": true }], + + "@typescript-eslint/require-await": "error", + + "semi": "off", + "@typescript-eslint/semi": "error", + + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/type-annotation-spacing": "error", + "@typescript-eslint/unified-signatures": "error", + + // eslint-plugin-import + "import/no-extraneous-dependencies": ["error", { "optionalDependencies": false }], + + // eslint-plugin-no-null + "no-null/no-null": "error", + + // eslint-plugin-jsdoc + "jsdoc/check-alignment": "error", + + // eslint + "brace-style": ["error", "1tbs", { "allowSingleLine": false }], + "constructor-super": "error", + "curly": ["error", "all"], + "dot-notation": "error", + "eqeqeq": "error", + "linebreak-style": ["error", "unix"], + "new-parens": "error", + "no-caller": "error", + "no-duplicate-case": "error", + "no-duplicate-imports": "error", + "no-empty": "error", + "no-eval": "error", + "no-extra-bind": "error", + "no-fallthrough": "error", + "no-new-func": "error", + "no-new-wrappers": "error", + "no-return-await": "error", + "no-restricted-globals": ["error", + { "name": "setTimeout" }, + { "name": "clearTimeout" }, + { "name": "setInterval" }, + { "name": "clearInterval" }, + { "name": "setImmediate" }, + { "name": "clearImmediate" } + ], + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-throw-literal": "error", + "no-trailing-spaces": "error", + "no-undef-init": "error", + "no-unsafe-finally": "error", + "no-unused-expressions": ["error", { "allowTernary": true }], + "no-unused-labels": "error", + "no-var": "error", + "object-shorthand": "error", + "prefer-const": "error", + "prefer-object-spread": "error", + "quote-props": ["error", "as-needed"], + "space-in-parens": "error", + "unicode-bom": ["error", "never"], + "use-isnan": "error", + + // prettier compatibility + "@typescript-eslint/no-extra-parens": "off" + } +} + + diff --git a/.github/workflows/push-workflow.yaml b/.github/workflows/push-workflow.yaml index 93e8470b..496a8d83 100644 --- a/.github/workflows/push-workflow.yaml +++ b/.github/workflows/push-workflow.yaml @@ -8,10 +8,19 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@master + - name: Install dependencies - run: npm install - - name: Compile typescript + run: npm ci + + - name: Run checks + run: npm run check + + - name: Compile Typescript run: npm run build + + - name: Run Tests + run: npm test + - name: Run mabl tests against deployment id: mabl-test-deployment uses: ./ diff --git a/.prettierignore b/.prettierignore index adea2103..fad4d14c 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,4 @@ package.json node_modules dist - -*.yml \ No newline at end of file +bin diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6595fce0..8436da54 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,9 @@ git commit -m " release" # Tag the release git tag +git push origin ``` Once the tag exists, you make a new release from it in the github UI. + +Repeat the tagging process (no release needed) for the major version (e.g. `v1`) and delete/replace this tag, allowing users to peg against the major version in workflows and automatically get updates. diff --git a/README.md b/README.md index 69c35d60..1998b932 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,11 @@ jobs: name: mabl Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@master + - uses: actions/checkout@v2 - name: Functional test deployment id: mabl-test-deployment - uses: mablhq/github-run-tests-action@v1.4 + uses: mablhq/github-run-tests-action@v1 env: MABL_API_KEY: ${{ secrets.MABL_API_KEY }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -53,7 +53,7 @@ jobs: Use the [curl builder](https://app.mabl.com/workspaces/-/settings/apis#api-docs-selector-dropdown-button) to find the id. -- `browser-types` {string} {optional}: comma seperated override for browser +- `browser-types` {string} {optional}: comma separated override for browser types to test e.g. `chrome, firefox, safari, internet_explorer`. If not provided, mabl will test the browsers configured on the triggered test. - 'uri' {string} {optional} the base uri to test against. If provided, this will @@ -83,3 +83,13 @@ jobs: deployment. - `tests_failed` {int32} - number of mabl tests that failed against this deployment. + + +## Contributing + +See [here](CONTRIBUTING.md) for details on contributing to this action. + +## License + +The Dockerfile and associated scripts and documentation in this project are +released under the [MIT License](LICENSE). diff --git a/package-lock.json b/package-lock.json index 318d5bd1..e815c41b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,115 @@ { "name": "mabl-github-deployments-action", - "version": "0.0.1", + "version": "1.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@actions/core": { - "version": "1.2.0", - "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@actions/core/-/core-1.2.0.tgz", - "integrity": "sha1-ql9Ssmw2LIIdQVV+WZNxpC9sCz0=" + "version": "1.2.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@actions/core/-/core-1.2.6.tgz", + "integrity": "sha1-p41J9BpN7xjojOR8LKxhXVaUvwk=" + }, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha1-Fo2ho26Q2miujUnA8bSMfGJJITo=", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha1-p4x6clHgH2FlEtMbEK3PUq2l4NI=", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@eslint/eslintrc": { + "version": "0.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@eslint/eslintrc/-/eslintrc-0.1.3.tgz", + "integrity": "sha1-fRorI1hVLMBINMCXm9QnU2LjcIU=", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + } }, "@types/async-retry": { "version": "1.4.1", @@ -18,10 +120,22 @@ "@types/retry": "*" } }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha1-HuMNeVRMqE1o1LPNsK9PIFZj3S0=", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA=", + "dev": true + }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, "@types/mocha": { @@ -36,73 +150,174 @@ "integrity": "sha512-aX+gFgA5GHcDi89KG5keey2zf0WfZk/HAQotEamsK2kbey+8yGKcson0hbK8E+v0NArlCJQCqMP161YhV6ZXLg==", "dev": true }, - "@types/q": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", - "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "dev": true }, - "@types/request": { - "version": "2.48.2", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.2.tgz", - "integrity": "sha512-gP+PSFXAXMrd5PcD7SqHeUjdGshAI8vKQ3+AvpQr3ht9iQea+59LOKvKITcQI+Lg+1EIkDP6AFSBUJPWG8GDyA==", + "@typescript-eslint/eslint-plugin": { + "version": "2.34.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.34.0.tgz", + "integrity": "sha1-b4zopGx96kpvHRcdK7j7rm2sK+k=", "dev": true, "requires": { - "@types/caseless": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "form-data": "^2.5.0" + "@typescript-eslint/experimental-utils": "2.34.0", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.0.0", + "tsutils": "^3.17.1" } }, - "@types/request-promise-native": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/@types/request-promise-native/-/request-promise-native-1.0.16.tgz", - "integrity": "sha512-gbLf6cg1XGBU8BObOgs5VkCQo5JFz2GstgZjyE4FRbig/jiCEdiynu2fCzJlw3qYPuoj59spKnvuRLN4PsMvhA==", + "@typescript-eslint/experimental-utils": { + "version": "2.34.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@typescript-eslint/experimental-utils/-/experimental-utils-2.34.0.tgz", + "integrity": "sha1-01JLZEzbQO687KZ/jPPkzJyPmA8=", "dev": true, "requires": { - "@types/request": "*" + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" } }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "@typescript-eslint/parser": { + "version": "2.34.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@typescript-eslint/parser/-/parser-2.34.0.tgz", + "integrity": "sha1-UCUmMMoxloVCDpo5ygX+GFola8g=", + "dev": true, + "requires": { + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.34.0", + "@typescript-eslint/typescript-estree": "2.34.0", + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + } + } + }, + "@typescript-eslint/typescript-estree": { + "version": "2.34.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@typescript-eslint/typescript-estree/-/typescript-estree-2.34.0.tgz", + "integrity": "sha1-FK62NTs57wcyzH8bgoUpSTfPN9U=", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", + "glob": "^7.1.6", + "is-glob": "^4.0.1", + "lodash": "^4.17.15", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + } + } + }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha1-qlgEJxHW4ydd033Fl+XTHowpCkQ=", + "dev": true + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=", "dev": true }, - "@types/tough-cookie": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", - "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=", "dev": true }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=", + "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha1-y7muJWv3UK8eqzRPIpqif+lLo0g=", + "dev": true + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha1-zdZ+aFK9+cEhVGB4ZzIlXtJFk0g=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + } + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha1-DegrQmsDGNv9uUAInjiwQ9N/bHs=", + "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, - "assert-plus": { + "astral-regex": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha1-bIw/uCfdQ+45GPJ7gngqt2WKb9k=", + "dev": true }, "async-retry": { "version": "1.2.3", @@ -112,60 +327,88 @@ "retry": "0.12.0" } }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "azure-pipelines-task-lib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-2.8.0.tgz", - "integrity": "sha512-PR8oap9z2j+o455W3PwAfB4SX1p4GdJc9OHQaQV0V+iQS1IBY6dVgcNSQMkHAXb0V1bbuLOFBLanXPe5eSgGTQ==", + "axios": { + "version": "0.20.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/axios/-/axios-0.20.0.tgz", + "integrity": "sha1-BXujDwSIRpSZOozQf6OUz/EcUL0=", "requires": { - "minimatch": "3.0.4", - "mockery": "^1.7.0", - "q": "^1.1.2", - "semver": "^5.1.0", - "shelljs": "^0.3.0", - "uuid": "^3.0.1" + "follow-redirects": "^1.10.0" } }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - } + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha1-MPpAyef+B9vIlWeM0ocCTeokHdk=", + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + "braces": { + "version": "3.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/braces/-/braces-3.0.2.tgz", + "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha1-wd84IxRI5FykrFiObHlXO6alfVs=", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.5.0" + } }, "cli-table3": { "version": "0.5.1", @@ -177,353 +420,1531 @@ "string-width": "^2.1.1" } }, + "cliui": { + "version": "5.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", + "dev": true + }, "colors": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", "optional": true }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" - } + "comment-parser": { + "version": "0.7.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/comment-parser/-/comment-parser-0.7.6.tgz", + "integrity": "sha1-DnQ6U8jmRsiZoTI9sx9s0zexDxI=", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "contains-path": { + "version": "0.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=", + "dev": true, "requires": { - "assert-plus": "^1.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "debug": { + "version": "4.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/debug/-/debug-4.2.0.tgz", + "integrity": "sha1-fxUPk5IOlMWPVXTC/QGjEQ7/5/E=", + "dev": true, "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "ms": "2.1.2" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "decamelize": { + "version": "1.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + "deep-is": { + "version": "0.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, - "form-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.0.tgz", - "integrity": "sha512-WXieX3G/8side6VIqx44ablyULoGruSde5PNTxoUyo5CeyAMX6nVWUd0rgist/EuX655cjhUhTo1Fo3tRYqbcA==", + "define-properties": { + "version": "1.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "object-keys": "^1.0.12" } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "diff": { + "version": "4.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/diff/-/diff-4.0.2.tgz", + "integrity": "sha1-YPOuy4nV+uUgwRqhnvwruYKq3n0=", + "dev": true + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=", + "dev": true, "requires": { - "assert-plus": "^1.0.0" + "esutils": "^2.0.2" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "dev": true }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "enquirer": { + "version": "2.3.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha1-Kn/l3WNKHkElqXXsmU/1RW3Dc00=", + "dev": true, "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "ansi-colors": "^4.1.1" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "error-ex": { + "version": "1.3.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=", + "dev": true, "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "is-arrayish": "^0.2.1" } }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "es-abstract": { + "version": "1.17.7", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=", + "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha1-5VzUyc3BiLzvsDs2bHNjI/xciYo=", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=", + "dev": true }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "eslint": { + "version": "7.11.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint/-/eslint-7.11.0.tgz", + "integrity": "sha1-qvLSOgtfHWUqCO2s6gwZ9/rcCzs=", + "dev": true, "requires": { - "mime-db": "1.40.0" + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.1.3", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "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", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "eslint-import-resolver-node": { + "version": "0.3.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz", + "integrity": "sha1-hf+oGULCUBLYIxCW3fZ5wDBCxxc=", + "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "debug": "^2.6.9", + "resolve": "^1.13.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "mockery": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz", - "integrity": "sha1-9O3g2HUMHJcnwnLqLGBiniyaHE8=" - }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "psl": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", - "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "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.0", - "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "eslint-module-utils": { + "version": "2.6.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz", + "integrity": "sha1-V569CU9Wr3eX0ZyYZsnJSGYpv6Y=", + "dev": true, + "requires": { + "debug": "^2.6.9", + "pkg-dir": "^2.0.0" }, "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "debug": { + "version": "2.6.9", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "ms": "2.0.0" } }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + "ms": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "eslint-plugin-import": { + "version": "2.22.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz", + "integrity": "sha1-CJbH5qDPRBCaLZe5WQPCu2iddwI=", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flat": "^1.2.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.4", + "eslint-module-utils": "^2.6.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.1", + "read-pkg-up": "^2.0.0", + "resolve": "^1.17.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "dev": true, + "requires": { + "ms": "2.0.0" + } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "doctrine": { + "version": "1.5.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, - "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "eslint-plugin-jsdoc": { + "version": "30.7.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-30.7.3.tgz", + "integrity": "sha1-EIdkLXxKuhO5fdfB/bzsSc19zHI=", + "dev": true, "requires": { - "lodash": "^4.17.11" + "comment-parser": "^0.7.6", + "debug": "^4.2.0", + "jsdoctypeparser": "^9.0.0", + "lodash": "^4.17.20", + "regextras": "^0.7.1", + "semver": "^7.3.2", + "spdx-expression-parse": "^3.0.1" } }, - "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "eslint-plugin-no-null": { + "version": "1.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-plugin-no-null/-/eslint-plugin-no-null-1.0.2.tgz", + "integrity": "sha1-EjaoEjkTkKGHetQAfCbnRTQclR8=", + "dev": true + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=", + "dev": true, "requires": { - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha1-If3I+82ceVzAMh8FY3AglXUVEag=", + "dev": true + }, + "espree": { + "version": "7.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/espree/-/espree-7.3.0.tgz", + "integrity": "sha1-3DBDfPZ5R89XYSHr14DxXurHI0g=", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "dev": true + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha1-dNLrTeC42hKTcRkQ1Qd1ubcQ72Q=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha1-TJKBnstwg1YeT0okCoa+UZj1Nvw=", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat": { + "version": "5.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/flat/-/flat-5.0.2.tgz", + "integrity": "sha1-jKb+MyBp/6nTJMMnGYxZglnOskE=", + "dev": true + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=", + "dev": true + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha1-+3OHA66NL5/pAMM4Nt3r7ouX8j4=", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/glob/-/glob-7.1.6.tgz", + "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/globals/-/globals-12.4.0.tgz", + "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=", + "dev": true + }, + "growl": { + "version": "1.10.5", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/growl/-/growl-1.10.5.tgz", + "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/has/-/has-1.0.3.tgz", + "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/he/-/he-1.2.0.tgz", + "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.8", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=", + "dev": true + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=", + "dev": true + }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha1-WFMbcK7R23wOjU6xoKLR3dZL0S0=", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha1-ReQuN/zPH0Dajl927iFRWEDAkoc=", + "dev": true + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha1-QEk+0ZjvP/R3uMf5L2ROyCpc06Y=", + "dev": true + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=", + "dev": true, + "requires": { + "has-symbols": "^1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", + "dev": true + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha1-p6NBcPJqIbsWJCTYray0ETpp5II=", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsdoctypeparser": { + "version": "9.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/jsdoctypeparser/-/jsdoctypeparser-9.0.0.tgz", + "integrity": "sha1-jJfi+2kxXrJ0sPATd+qlyUC9eyY=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "1.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/json5/-/json5-1.0.1.tgz", + "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/levn/-/levn-0.4.1.tgz", + "integrity": "sha1-rkViwAdHO5MqYgDUAyaN0v/8at4=", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha1-VTIeswn+u8WcSAHZMackUqaB0oY=", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI=", + "dev": true + }, + "log-symbols": { + "version": "4.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/log-symbols/-/log-symbols-4.0.0.tgz", + "integrity": "sha1-abPMRtIPRI7M23XqH6cz2eghySA=", + "dev": true, + "requires": { + "chalk": "^4.0.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=", + "dev": true + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "mocha": { + "version": "8.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/mocha/-/mocha-8.2.0.tgz", + "integrity": "sha1-+Kp5EQtLWmWAxl1N2Ag8QlKCYk4=", + "dev": true, + "requires": { + "@ungap/promise-all-settled": "1.1.2", + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.4.3", + "debug": "4.2.0", + "diff": "4.0.2", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.6", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.14.0", + "log-symbols": "4.0.0", + "minimatch": "3.0.4", + "ms": "2.1.2", + "nanoid": "3.1.12", + "serialize-javascript": "5.0.1", + "strip-json-comments": "3.1.1", + "supports-color": "7.2.0", + "which": "2.0.2", + "wide-align": "1.1.3", + "workerpool": "6.0.2", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "2.0.0" + } + }, + "moment": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", + "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ms/-/ms-2.1.2.tgz", + "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=", + "dev": true + }, + "nanoid": { + "version": "3.1.12", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/nanoid/-/nanoid-3.1.12.tgz", + "integrity": "sha1-b3c2xi6NOUIWAeSgx3YjqX6mllQ=", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/semver/-/semver-5.7.1.tgz", + "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha1-34B+Xs9TpgnMa/6T6sPMe+WzqdA=", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "dev": true + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha1-MDhnpmbN1Bk27N7fsfjz4ypHjN0=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.0", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha1-TyNqY3Pa4FZqbUPhMmZ09QwpFJk=", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "3.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha1-FmTgEK88rcaBuq/T4qQ3vnsPtf4=", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha1-g8gxXGeFAF470CGDlBHJ4RDm2DQ=", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha1-aR0nCeeMefrjoVZiJFLQB2LKqqI=", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=", + "dev": true + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha1-3rxkidem5rDnYRiIzsiAM30xY5Y=", + "dev": true + }, + "prettier": { + "version": "2.1.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha1-MFBwDa4uTItnxMP2Zs24r0BeHOU=", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/progress/-/progress-2.0.3.tgz", + "integrity": "sha1-foz42PW48jnBvGi+tOt4Vn1XLvg=", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha1-32+ENy8CcNxlzfYpE0mrekc9Tyo=", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + } + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha1-IG0K0KVkjP+9uK5GQ489xRyfeOI=", + "dev": true + }, + "regextras": { + "version": "0.7.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/regextras/-/regextras-0.7.1.tgz", + "integrity": "sha1-vpVxnV9D+e8Ln6B62Jt8YGmVo7I=", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", + "dev": true + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha1-AY/LLFsgfSpkJK7jYcWiZtqPQTA=", + "dev": true, + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=", + "dev": true, + "requires": { + "glob": "^7.1.3" + } }, "safe-buffer": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true }, "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" - }, - "shelljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.3.0.tgz", - "integrity": "sha1-NZbmMHp4FUT1kfN9phg2DzHbV7E=" - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "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" - } - }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=" + "version": "7.3.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/semver/-/semver-7.3.2.tgz", + "integrity": "sha1-YElisFK4HtB4aq6EOJ/7pw/9OTg=", + "dev": true + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha1-eIbshIBJpGJGepfT2Rjrsqr5NPQ=", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + } + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz", + "integrity": "sha1-yAdXODwoq/cpZ0SZjLwQaui4VM4=", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "string-width": { "version": "2.1.1", @@ -534,6 +1955,70 @@ "strip-ansi": "^4.0.0" } }, + "string.prototype.trimend": { + "version": "1.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/string.prototype.trimend/-/string.prototype.trimend-1.0.2.tgz", + "integrity": "sha1-bd2ah5a8cUtImjriIkaiCPN7+kY=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/string.prototype.trimstart/-/string.prototype.trimstart-1.0.2.tgz", + "integrity": "sha1-ItRdqBAVMJzQzdeXh+iRn8XGE+c=", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-negative-zero": "^2.0.0", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -542,74 +2027,399 @@ "ansi-regex": "^3.0.0" } }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", + "dev": true, "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/table/-/table-5.4.6.tgz", + "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } } }, - "tunnel": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=" + "text-table": { + "version": "0.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "tsconfig-paths": { + "version": "3.9.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz", + "integrity": "sha1-CYVHpsREiAfo/Ljq4IEGTumjyQs=", + "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" } }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" + "tslib": { + "version": "1.14.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=", + "dev": true + }, + "tsutils": { + "version": "3.17.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha1-7XGZF/EcoN7lhicrKsSeAVot11k=", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } }, - "typed-rest-client": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.5.0.tgz", - "integrity": "sha512-DVZRlmsfnTjp6ZJaatcdyvvwYwbWvR4YDNFDqb+qdTxpvaVP99YCpBkA8rxsLtAPjBVoDe4fNsnMIdZTiPuKWg==", + "type-check": { + "version": "0.4.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha1-B7ggO/pwVsBlcFDjzNLDdzC6uPE=", + "dev": true, "requires": { - "tunnel": "0.0.4", - "underscore": "1.8.3" + "prelude-ls": "^1.2.1" } }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" + "type-fest": { + "version": "0.8.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=", + "dev": true + }, + "typescript": { + "version": "4.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/typescript/-/typescript-4.0.3.tgz", + "integrity": "sha1-FTu9Ro7wdyXB35x36LRT+NNqu6U=", + "dev": true }, "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "version": "4.4.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=", + "dev": true, "requires": { "punycode": "^2.1.0" } }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha1-VLw83UMxe8qR413K8wWxpyN950U=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha1-/JH2uce6FchX9MssXe/uw51PQQo=", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/which/-/which-2.0.2.tgz", + "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=", + "dev": true + }, + "workerpool": { + "version": "6.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/workerpool/-/workerpool-6.0.2.tgz", + "integrity": "sha1-4kG0PY0DPxvrUseFEGlFYDnR1Dg=", + "dev": true + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/write/-/write-1.0.3.tgz", + "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=", + "dev": true, "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } }, - "xmlbuilder": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", - "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha1-8TH5ImkRrl2a04xDL+gJNmwjJes=", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "dependencies": { + "camelcase": { + "version": "6.1.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/camelcase/-/camelcase-6.1.0.tgz", + "integrity": "sha1-J9wXYXNyX7Ct+KSLZH9NeHGUTXg=", + "dev": true + }, + "decamelize": { + "version": "4.0.0", + "resolved": "https://longreen.jfrog.io/longreen/api/npm/npm/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha1-qkcte/Zg6xXzSU79UxyrfypwmDc=", + "dev": true + } + } } } } diff --git a/package.json b/package.json index 2febe48c..a2352fbb 100644 --- a/package.json +++ b/package.json @@ -1,30 +1,39 @@ { "name": "mabl-github-deployments-action", - "version": "0.0.1", + "version": "1.6.0", "description": "mabl github action for GitHub pipelines integration", "main": "lib/index.js", "scripts": { - "test": "tsc && mocha ./tests/_suite.js", + "test": "tsc && mocha ./lib/tests/_suite.js", "build": "tsc", - "release": "npm install && npm run build && npm prune --production && git add -f node_modules/* && git add -f lib/*" + "release": "npm install && npm run build && npm prune --production && git add -f node_modules/* && git add -f lib/*", + "fix:prettier": "prettier --write 'src/**/*.ts'", + "fix:eslint": "eslint 'src/**/*.ts' --fix", + "fix": "npm run fix:eslint && npm run fix:prettier", + "check:prettier": "prettier --check 'src/**/*.ts'", + "check:eslint": "eslint 'src/**/*.ts'", + "check": "npm run check:eslint && npm run check:prettier" }, "author": "mabl", "dependencies": { - "@actions/core": "^1.2.0", + "@actions/core": "^1.2.6", "async-retry": "^1.2.3", - "azure-pipelines-task-lib": "^2.8.0", + "axios": "^0.20.0", "cli-table3": "^0.5.1", - "moment": "^2.24.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "typed-rest-client": "^1.2.0", - "xmlbuilder": "^13.0.0" + "moment": "^2.24.0" }, "devDependencies": { "@types/async-retry": "^1.4.1", "@types/mocha": "^5.2.7", "@types/node": "^12.0.10", - "@types/q": "^1.5.2", - "@types/request-promise-native": "^1.0.16" + "@typescript-eslint/eslint-plugin": "^2.34.0", + "@typescript-eslint/parser": "^2.34.0", + "eslint": "^7.11.0", + "eslint-plugin-import": "^2.22.1", + "eslint-plugin-jsdoc": "^30.7.3", + "eslint-plugin-no-null": "^1.0.2", + "mocha": "^8.2.0", + "prettier": "^2.1.2", + "typescript": "^4.0.3" } } diff --git a/src/entities/Deployment.ts b/src/entities/Deployment.ts index a07a461c..5aa8f7fd 100644 --- a/src/entities/Deployment.ts +++ b/src/entities/Deployment.ts @@ -3,9 +3,9 @@ export interface Deployment { application_id: string; environment_id: string; received_time: number; - triggered_plan_run_summaries: Array; + triggered_plan_run_summaries: TriggeredPlanSummary[]; event_time: number; - revision: string | undefined; + revision?: string; properties: DeploymentProperties; } @@ -15,23 +15,23 @@ interface TriggeredPlanSummary { } export interface DeploymentProperties { - triggering_event_name: string | undefined; - repository_commit_username: string | undefined; - repository_action: string | undefined; - repository_name: string | undefined; - repository_branch_name: string | undefined; - repository_url: string | undefined; - repository_pull_request_url?: string | undefined; + triggering_event_name?: string; + repository_commit_username?: string; + repository_action?: string; + repository_name?: string; + repository_branch_name?: string; + repository_url?: string; + repository_pull_request_url?: string; repository_pull_request_number?: number | undefined; - repository_pull_request_title?: string | undefined; - repository_pull_request_merged_at?: string | undefined; - repository_pull_request_created_at?: string | undefined; + repository_pull_request_title?: string; + repository_pull_request_merged_at?: string; + repository_pull_request_created_at?: string; } export interface PullRequest { - title: string | undefined; - number: number | undefined; - created_at: string | undefined; - merged_at: string | undefined; - url: string | undefined; + title?: string; + number?: number; + created_at?: string; + merged_at?: string; + url?: string; } diff --git a/src/entities/ExecutionResult.ts b/src/entities/ExecutionResult.ts index e10060cb..fc9a165e 100644 --- a/src/entities/ExecutionResult.ts +++ b/src/entities/ExecutionResult.ts @@ -15,8 +15,8 @@ export interface Execution { success: boolean; plan: PlanInfo; plan_execution: PlanExecution; - journeys: Array; - journey_executions: Array; + journeys: JourneyInfo[]; + journey_executions: JourneyExecution[]; start_time: number; stop_time: number; } @@ -60,5 +60,5 @@ interface JourneyExecution { export interface ExecutionResult { plan_execution_metrics: PlanExecutionMetrics; journey_execution_metrics: JourneyExecutionMetrics; - executions: Array; + executions: Execution[]; } diff --git a/src/index.ts b/src/index.ts index 5dce337d..15ee49a5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,18 +1,19 @@ -import {mablApiClient} from './mablApiClient'; +import axios, {AxiosRequestConfig} from 'axios'; +import {MablApiClient} from './mablApiClient'; import { Deployment, - PullRequest, DeploymentProperties, + PullRequest, } from './entities/Deployment'; import {Application} from './entities/Application'; import {Execution, ExecutionResult} from './entities/ExecutionResult'; -import {prettyPrintExecution} from './table'; -import request from 'request-promise-native'; +import {prettyFormatExecution} from './table'; import * as core from '@actions/core/lib/core'; +import {Option} from './interfaces'; -const DEFAULT_MABL_APP_URL: string = 'https://app.mabl.com'; -const EXECUTION_POLL_INTERVAL_MILLIS: number = 10000; -const EXECUTION_COMPLETED_STATUSES: Array = [ +const DEFAULT_MABL_APP_URL = 'https://app.mabl.com'; +const EXECUTION_POLL_INTERVAL_MILLIS = 10000; +const EXECUTION_COMPLETED_STATUSES = [ 'succeeded', 'failed', 'cancelled', @@ -21,8 +22,9 @@ const EXECUTION_COMPLETED_STATUSES: Array = [ ]; const GITHUB_BASE_URL = 'https://api.github.com'; -async function run() { +async function run(): Promise { try { + core.startGroup('Gathering inputs'); const applicationId: string = core.getInput('application-id', { required: false, }); @@ -57,7 +59,7 @@ async function run() { core.getInput('continue-on-failure', {required: false}), ); - const pullRequest: PullRequest | undefined = await getRelatedPullRequest(); + const pullRequest = await getRelatedPullRequest(); const eventTimeString = core.getInput('event-time', {required: false}); const eventTime = eventTimeString ? parseInt(eventTimeString) : Date.now(); @@ -83,15 +85,18 @@ async function run() { } } - const baseApiUrl = process.env.APP_URL || DEFAULT_MABL_APP_URL; + const baseApiUrl = process.env.APP_URL ?? DEFAULT_MABL_APP_URL; + const revision = process.env.GITHUB_SHA; + + core.info(`Using git revision [${revision}]`); + core.endGroup(); + core.startGroup('Creating deployment event'); // set up http client - let apiClient: mablApiClient = new mablApiClient(apiKey); - const revision = process.env.GITHUB_SHA; + const apiClient: MablApiClient = new MablApiClient(apiKey); // send the deployment - core.debug('Creating Deployment'); - let deployment: Deployment = await apiClient.postDeploymentEvent( + const deployment: Deployment = await apiClient.postDeploymentEvent( applicationId, environmentId, browserTypes, @@ -107,42 +112,48 @@ async function run() { let outputLink: string = baseApiUrl; if (applicationId) { - let application: Application = await apiClient.getApplication( + const application: Application = await apiClient.getApplication( applicationId, ); outputLink = `${baseApiUrl}/workspaces/${application.organization_id}/events/${deployment.id}`; - core.debug(`Deployment triggered. View output at: ${outputLink}`); + core.info(`Deployment triggered. View output at: ${outputLink}`); } + core.startGroup('Await completion of tests'); + // poll Execution result until complete - let executionComplete: boolean = false; + let executionComplete = false; while (!executionComplete) { - await new Promise(resolve => + await new Promise((resolve) => + // eslint-disable-next-line no-restricted-globals setTimeout(resolve, EXECUTION_POLL_INTERVAL_MILLIS), ); - let executionResult: ExecutionResult = await apiClient.getExecutionResults( + const executionResult: ExecutionResult = await apiClient.getExecutionResults( deployment.id, ); - if (executionResult && executionResult.executions) { - let pendingExecutions: Array = getExecutionsStillPending( + if (executionResult?.executions) { + const pendingExecutions: Execution[] = getExecutionsStillPending( executionResult, ); if (pendingExecutions.length === 0) { executionComplete = true; } else { - core.debug( + core.info( `${pendingExecutions.length} mabl plan(s) are still running`, ); } } } - core.debug('mabl deployment runs have completed'); - let finalExecutionResult: ExecutionResult = await apiClient.getExecutionResults( + core.info('mabl deployment runs have completed'); + core.endGroup(); + + core.startGroup('Fetch execution results'); + const finalExecutionResult: ExecutionResult = await apiClient.getExecutionResults( deployment.id, ); finalExecutionResult.executions.forEach((execution: Execution) => { - prettyPrintExecution(execution); + core.info(prettyFormatExecution(execution)); }); core.setOutput( @@ -182,6 +193,7 @@ async function run() { `${finalExecutionResult.journey_execution_metrics.failed} mabl test(s) failed`, ); } + core.endGroup(); } catch (err) { core.setFailed( `mabl deployment task failed for the following reason: ${err}`, @@ -190,12 +202,12 @@ async function run() { } function parseBoolean(toParse: string): boolean { - return !!(toParse && toParse.toLowerCase() == 'true'); + return toParse?.toLowerCase() === 'true'; } function getExecutionsStillPending( executionResult: ExecutionResult, -): Array { +): Execution[] { return executionResult.executions.filter((execution: Execution) => { return !( EXECUTION_COMPLETED_STATUSES.includes(execution.status) && @@ -204,45 +216,35 @@ function getExecutionsStillPending( }); } -function getRelatedPullRequest(): Promise { +async function getRelatedPullRequest(): Promise> { const targetUrl = `${GITHUB_BASE_URL}/repos/${process.env.GITHUB_REPOSITORY}/commits/${process.env.GITHUB_SHA}/pulls`; const githubToken = process.env.GITHUB_TOKEN; if (!githubToken) { - return Promise.resolve(); + return; } - const postOptions = { - method: 'GET', - url: targetUrl, + const config: AxiosRequestConfig = { headers: { Authorization: `token ${githubToken}`, Accept: 'application/vnd.github.groot-preview+json', 'Content-Type': 'application/json', 'User-Agent': 'mabl-action', }, - json: true, }; + const client = axios.create(config); - return request(postOptions) - .then(response => { - if (!response || !response.length) { - return; - } + try { + const response = await client.get(targetUrl, config); + return response?.data?.[0]; + } catch (error) { + if (error.status !== 404) { + core.warning(error.message); + } + } - return { - title: response[0].title, - number: response[0].number, - created_at: response[0].created_at, - merged_at: response[0].merged_at, - url: response[0].url, - }; - }) - .catch(error => { - if (error.status != 404) { - core.warning(error.message); - } - }); + return; } +// eslint-disable-next-line run(); diff --git a/src/interfaces.ts b/src/interfaces.ts new file mode 100644 index 00000000..09b88362 --- /dev/null +++ b/src/interfaces.ts @@ -0,0 +1 @@ +export type Option = T | undefined; diff --git a/src/mablApiClient.ts b/src/mablApiClient.ts index cb61b02c..87be8c8e 100644 --- a/src/mablApiClient.ts +++ b/src/mablApiClient.ts @@ -1,45 +1,38 @@ -import * as httpm from 'typed-rest-client/HttpClient'; -import * as hm from 'typed-rest-client/Handlers'; import retry from 'async-retry'; import {Application} from './entities/Application'; import {Deployment, DeploymentProperties} from './entities/Deployment'; import {ExecutionResult} from './entities/ExecutionResult'; +import axios, {AxiosInstance, AxiosRequestConfig} from 'axios'; -export class mablApiClient { - httpClient: httpm.HttpClient; - baseUrl: string = process.env.APP_URL || 'https://api.mabl.com'; +export class MablApiClient { + private readonly httpClient: AxiosInstance; + private readonly baseUrl: string = + process.env.APP_URL ?? 'https://api.mabl.com'; constructor(apiKey: string) { - let bh: hm.BasicCredentialHandler = new hm.BasicCredentialHandler( - 'key', - apiKey, - ); - this.httpClient = new httpm.HttpClient( - 'mabl-azure-devops-extension', - [bh], - { - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json', - }, + const config: AxiosRequestConfig = { + headers: { + 'User-Agent': 'github-run-tests-action', + Accept: 'application/json', + 'Content-Type': 'application/json', }, - ); + auth: { + username: 'key', + password: apiKey, + }, + }; + + this.httpClient = axios.create(config); } - async makeGetRequest(path: string): Promise { - return await retry( + async makeGetRequest(url: string): Promise { + return retry( async () => { - let response: httpm.HttpClientResponse = await this.httpClient.get( - path, - ); - if ((response.message.statusCode || 400) >= 400) { - throw `[${response.message.statusCode} - ${ - response.message.statusMessage - }]`; + const response = await this.httpClient.get(url); + if ((response.status ?? 400) >= 400) { + throw new Error(`[${response.status} - ${response.statusText}]`); } - let body: string = await response.readBody(); - let obj: any = JSON.parse(body); - return obj; + return response.data; }, { retries: 3, @@ -47,21 +40,17 @@ export class mablApiClient { ); } - async makePostRequest(path: string, requestBody: object): Promise { - return await retry( + async makePostRequest(url: string, requestBody: object): Promise { + return retry( async () => { - let response: httpm.HttpClientResponse = await this.httpClient.post( - path, + const response = await this.httpClient.post( + url, JSON.stringify(requestBody), ); - if ((response.message.statusCode || 400) >= 400) { - throw `[${response.message.statusCode} - ${ - response.message.statusMessage - }]`; + if ((response.status ?? 400) >= 400) { + throw new Error(`[${response.status} - ${response.statusText}]`); } - let body: string = await response.readBody(); - let obj: any = JSON.parse(body); - return obj; + return response.data; }, { retries: 3, @@ -69,25 +58,27 @@ export class mablApiClient { ); } - async getApplication(applicationId: string): Promise { + async getApplication(applicationId: string): Promise { try { - let response: Application = await this.makeGetRequest( + return await this.makeGetRequest( `${this.baseUrl}/v1/applications/${applicationId}`, ); - return response; - } catch (e) { - throw `failed to get mabl application ($applicationId) from the API ${e}`; + } catch (error) { + throw new Error( + `failed to get mabl application ($applicationId) from the API ${error}`, + ); } } - async getExecutionResults(eventId: string): Promise { + async getExecutionResults(eventId: string): Promise { try { - let response: ExecutionResult = await this.makeGetRequest( + return await this.makeGetRequest( `${this.baseUrl}/execution/result/event/${eventId}`, ); - return response; - } catch (e) { - throw `failed to get mabl execution results for event ${eventId} from the API ${e}`; + } catch (error) { + throw new Error( + `failed to get mabl execution results for event ${eventId} from the API ${error}`, + ); } } @@ -103,24 +94,23 @@ export class mablApiClient { properties: DeploymentProperties, ): Promise { try { - - let requestBody: any = this.buildRequestBody( + const requestBody: any = this.buildRequestBody( applicationId, environmentId, browserTypes, uri, rebaselineImages, setStaticBaseline, - revision, eventTime, properties, + revision, ); - return await this.makePostRequest( + return await this.makePostRequest( `${this.baseUrl}/events/deployment/`, requestBody, ); } catch (e) { - throw `failed to create deployment through mabl API ${e}`; + throw new Error(`failed to create deployment through mabl API ${e}`); } } @@ -131,32 +121,45 @@ export class mablApiClient { uri: string, rebaselineImages: boolean, setStaticBaseline: boolean, - revision: string | undefined, event_time: number, properties: DeploymentProperties, + revision?: string, ): any { - let requestBody: any = {}; + const requestBody: any = {}; - environmentId ? (requestBody.environment_id = environmentId) : null; - applicationId ? (requestBody.application_id = applicationId) : null; + if (environmentId) { + requestBody.environment_id = environmentId; + } + if (applicationId) { + requestBody.application_id = applicationId; + } - let planOverrides: any = {}; - browserTypes - ? (planOverrides.browser_types = browserTypes.split(',')) - : null; - uri ? (planOverrides.uri = uri) : null; + const planOverrides: any = {}; + if (browserTypes) { + planOverrides.browser_types = browserTypes.split(','); + } + if (uri) { + planOverrides.uri = uri; + } requestBody.plan_overrides = planOverrides; - revision ? (requestBody.revision = revision) : null; - event_time ? (requestBody.event_time = event_time) : null; - properties ? (requestBody.properties = properties) : null; - + if (revision) { + requestBody.revision = revision; + } + if (event_time) { + requestBody.event_time = event_time; + } + if (properties) { + requestBody.properties = properties; + } - let actions: any = {}; - rebaselineImages ? (actions.rebaseline_images = rebaselineImages) : null; - setStaticBaseline - ? (actions.set_static_baseline = setStaticBaseline) - : null; + const actions: any = {}; + if (rebaselineImages) { + actions.rebaseline_images = rebaselineImages; + } + if (setStaticBaseline) { + actions.set_static_baseline = setStaticBaseline; + } requestBody.actions = actions; return requestBody; } diff --git a/src/table.ts b/src/table.ts index fb0fb08f..c78c61c0 100644 --- a/src/table.ts +++ b/src/table.ts @@ -1,11 +1,12 @@ import {Execution, JourneyInfo} from './entities/ExecutionResult'; -import Table from 'cli-table3'; -import {HorizontalTable} from 'cli-table3'; +import Table, {HorizontalTable} from 'cli-table3'; import * as moment from 'moment'; -import * as core from '@actions/core/lib/core'; +import {Option} from './interfaces'; -export function prettyPrintExecution(execution: Execution) { - let planTable = new Table({ +export function prettyFormatExecution(execution: Execution): string { + let outputString = ''; + + const planTable = new Table({ head: [], style: { head: [], @@ -14,6 +15,7 @@ export function prettyPrintExecution(execution: Execution) { colWidths: [15, 30, 15, 13, 15, 20, 17, 130], wordWrap: true, }) as HorizontalTable; + planTable.push([ 'Plan Name:', execution.plan.name, @@ -25,7 +27,7 @@ export function prettyPrintExecution(execution: Execution) { execution.plan.app_href, ]); - let testTable = new Table({ + const testTable = new Table({ head: ['Browser', 'Status', 'Test Name', 'Duration', 'mabl App Link'], style: { head: [], @@ -34,24 +36,30 @@ export function prettyPrintExecution(execution: Execution) { colWidths: [10, 15, 27, 15, 160], wordWrap: true, }) as HorizontalTable; - execution.journey_executions.forEach(jE => { - let test: JourneyInfo | undefined = execution.journeys.find( - test => test.id === jE.journey_id, + + execution.journey_executions.forEach((journeyExecution) => { + const test: Option = execution.journeys.find( + (test) => test.id === journeyExecution.journey_id, ); + testTable.push([ - jE.browser_type, - jE.success ? 'Passed' : 'Failed', - test ? test.name : jE.journey_id, - moment.utc(jE.stop_time - jE.start_time).format('HH:mm:ss'), - jE.app_href, + journeyExecution.browser_type, + journeyExecution.success ? 'Passed' : 'Failed', + test ? test.name : journeyExecution.journey_id, + moment + .utc(journeyExecution.stop_time - journeyExecution.start_time) + .format('HH:mm:ss'), + journeyExecution.app_href, ]); }); - outputTable(planTable); - outputTable(testTable); + outputString += outputTable(planTable); + outputString += '\n'; // prevent offset table row in output + outputString += outputTable(testTable); + + return outputString; } -function outputTable(table: HorizontalTable) { - let tableAsString = table.toString().replace(/[\r\n]+/, '\n '); - console.log(tableAsString); +function outputTable(table: HorizontalTable): string { + return table.toString().replace(/[\r\n]+/, '\n '); } diff --git a/src/tests/_suite.ts b/src/tests/_suite.ts index 0f3bdb96..8c0face8 100644 --- a/src/tests/_suite.ts +++ b/src/tests/_suite.ts @@ -1,24 +1,44 @@ import * as assert from 'assert'; -import {} from 'mocha'; -import {mablApiClient} from '../mablApiClient'; +import {MablApiClient} from '../mablApiClient'; -describe('azure pipeline task tests', function() { - before(function() {}); +describe('GitHub Action tests', function () { + before(function () {}); after(() => {}); - it('builds the request correctly with all options', function(done: MochaDone) { - let expected: any = - '{"environment_id":"env","application_id":"app","plan_overrides":{"browser_types":["firefox"," chrome"," internet_explorer"],"uri":"uri"},"actions":{"rebaseline_images":true,"set_static_baseline":true}}'; - let apiClient: mablApiClient = new mablApiClient('test'); - let requestBody = apiClient.buildRequestBody( + it('builds the request correctly with all options', (done: MochaDone) => { + const expected = { + environment_id: 'env', + application_id: 'app', + plan_overrides: { + browser_types: ['firefox', ' chrome', ' internet_explorer'], + uri: 'uri', + }, + actions: {rebaseline_images: true, set_static_baseline: true}, + revision: 'abcs', + properties: { + repository_branch_name: 'master', + repository_commit_username: 'gcooney', + repository_action: 'mabl-tests', + repository_url: 'git@github.com:mablhq/github-mabl-actions.git', + repository_name: 'github-mabl-actions', + triggering_event_name: 'push', + repository_pull_request_url: 'https://github.com/mablhq/repo/pr/1', + repository_pull_request_number: 5, + repository_pull_request_title: 'good pr', + repository_pull_request_merged_at: '2019', + repository_pull_request_created_at: '2019', + }, + }; + const apiClient: MablApiClient = new MablApiClient('test'); + const requestBody = apiClient.buildRequestBody( 'app', 'env', 'firefox, chrome, internet_explorer', 'uri', true, true, - 'abcs', + 0, { repository_branch_name: 'master', @@ -33,23 +53,41 @@ describe('azure pipeline task tests', function() { repository_pull_request_merged_at: '2019', repository_pull_request_created_at: '2019', }, + 'abcs', ); - assert.equal(expected, JSON.stringify(requestBody)); + assert.deepEqual(expected, requestBody); done(); }); - it('builds the request correctly with some options', function(done: MochaDone) { - let expected: any = - '{"application_id":"app","plan_overrides":{"uri":"uri"},"actions":{}}'; - let apiClient: mablApiClient = new mablApiClient('test'); - let requestBody = apiClient.buildRequestBody( + it('builds the request correctly with some options', (done: MochaDone) => { + const expected = { + application_id: 'app', + plan_overrides: {uri: 'uri'}, + actions: {}, + revision: 'abcs', + properties: { + repository_branch_name: 'master', + repository_commit_username: 'gcooney', + repository_action: 'mabl-tests', + repository_name: 'github-mabl-actions', + repository_url: 'git@github.com:mablhq/github-mabl-actions.git', + triggering_event_name: 'push', + repository_pull_request_url: 'https://github.com/mablhq/repo/pr/1', + repository_pull_request_number: 5, + repository_pull_request_title: 'good pr', + repository_pull_request_merged_at: '2019', + repository_pull_request_created_at: '2019', + }, + }; + const apiClient: MablApiClient = new MablApiClient('test'); + const requestBody = apiClient.buildRequestBody( 'app', '', '', 'uri', false, false, - 'abcs', + 0, { repository_branch_name: 'master', @@ -64,8 +102,9 @@ describe('azure pipeline task tests', function() { repository_pull_request_merged_at: '2019', repository_pull_request_created_at: '2019', }, + 'abcs', ); - assert.equal(expected, JSON.stringify(requestBody)); + assert.deepEqual(expected, requestBody); done(); }); }); diff --git a/tsconfig.json b/tsconfig.json index 6dd09ea5..db8007e7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,63 +1,22 @@ { + "include": [ + "src/**/*", + "test/**/*" + ], + "exclude": ["node_modules"], "compilerOptions": { - /* Basic Options */ - "target": "es2016" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true, /* Allow javascript files to be compiled. */ - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - // "declaration": true, /* Generates corresponding '.d.ts' file. */ - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - // "sourceMap": true, /* Generates corresponding '.map' file. */ - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./lib", /* Redirect output structure to the directory. */ - "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "incremental": true, /* Enable incremental compilation */ - // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - // "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ - // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [], /* Type declaration files to be included in compilation. */ - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ - }, - "typesRoots": ["./typings-custom/**/*.ts"] + "importsNotUsedAsValues": "remove", + "module": "commonjs", + "outDir": "./lib", + "noFallthroughCasesInSwitch": true, + "noImplicitAny": true, + "noImplicitReturns": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "removeComments": true, + "strict": true, + "target": "es2016", + "esModuleInterop": true + } }