diff --git a/package-lock.json b/package-lock.json index 4bb0b5e46..4666c0c1d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,19 +25,19 @@ } }, "@kubernetes/client-node": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.8.2.tgz", - "integrity": "sha512-crS3h59+fOGXQgxVdq3XH81ytY7FV2HnB5z/+lSWD3bi5D5lHKu3PVN2PHCDMNExPy0KthcfqBoIVFVy4CoG3A==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@kubernetes/client-node/-/client-node-0.10.2.tgz", + "integrity": "sha512-JvsmxbTwiMqsh9LyuXMzT5HjoENFbB3a/JroJsobuAzkxN162UqAOvg++/AA+ccIMWRR2Qln4FyaOJ0a4eKyXg==", "requires": { - "@types/js-yaml": "^3.11.2", + "@types/js-yaml": "^3.12.1", "@types/node": "^10.12.0", "@types/request": "^2.47.1", "@types/underscore": "^1.8.9", "@types/ws": "^6.0.1", - "byline": "^5.0.0", "isomorphic-ws": "^4.0.1", - "js-yaml": "^3.12.0", - "jsonpath": "^1.0.0", + "js-yaml": "^3.13.1", + "json-stream": "^1.0.0", + "jsonpath-plus": "^0.19.0", "request": "^2.88.0", "shelljs": "^0.8.2", "tslib": "^1.9.3", @@ -46,9 +46,9 @@ }, "dependencies": { "@types/node": { - "version": "10.14.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.6.tgz", - "integrity": "sha512-Fvm24+u85lGmV4hT5G++aht2C5I4Z4dYlWZIh62FAfFO/TfzXtPpoLI6I7AuBWkIFqZCnhFOoTT7RjjaIL5Fjg==" + "version": "10.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.10.tgz", + "integrity": "sha512-V8wj+w2YMNvGuhgl/MA5fmTxgjmVHVoasfIaxMMZJV6Y8Kk+Ydpi1z2whoShDCJ2BuNVoqH/h1hrygnBxkrw/Q==" } } }, @@ -72,9 +72,9 @@ } }, "@sinonjs/samsam": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.1.tgz", - "integrity": "sha512-wRSfmyd81swH0hA1bxJZJ57xr22kC07a1N4zuIL47yTS04bDk6AoCkczcqHEjcRPmJ+FruGJ9WBQiJwMtIElFw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.2.tgz", + "integrity": "sha512-ILO/rR8LfAb60Y1Yfp9vxfYAASK43NFC2mLzpvLUbCQY/Qu8YwReboseu8aheCEkyElZF2L2T9mHcR2bgdvZyA==", "dev": true, "requires": { "@sinonjs/commons": "^1.0.2", @@ -128,9 +128,9 @@ } }, "@types/fs-extra": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.0.5.tgz", - "integrity": "sha512-w7iqhDH9mN8eLClQOYTkhdYUOSpp25eXxfc6VbFOGtzxW34JcvctH2bKjj4jD4++z4R5iO5D+pg48W2e03I65A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.1.0.tgz", + "integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==", "dev": true, "requires": { "@types/node": "*" @@ -168,15 +168,15 @@ } }, "@types/mocha": { - "version": "5.2.6", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz", - "integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==", + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", "dev": true }, "@types/node": { - "version": "11.13.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.13.8.tgz", - "integrity": "sha512-szA3x/3miL90ZJxUCzx9haNbK5/zmPieGraZEe4WI+3srN0eGLiT22NXeMHmyhNEopn+IrxqMc7wdVwvPl8meg==" + "version": "12.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.10.tgz", + "integrity": "sha512-LcsGbPomWsad6wmMNv7nBLw7YYYyfdYcz6xryKYQhx89c3XXan+8Q6AJ43G5XDIaklaVkK3mE4fCb0SBvMiPSQ==" }, "@types/request": { "version": "2.48.1", @@ -233,14 +233,14 @@ "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==" }, "@types/underscore": { - "version": "1.8.14", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.8.14.tgz", - "integrity": "sha512-xbzi6UaATVKupInG3D65/EPQ3qkJCvG2ZAzmlIYt6x93ACOEX2Y0fHW4/e8TF3G7q5KB2l7wTZgzfNjyYDMuZw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.9.0.tgz", + "integrity": "sha512-1koEJ2AhXaR0HVP3VlN0pCb51n87g5QL9rUiGaY+Nte9gBd2FYf/zNvS5ZtHg7o6owYNS6QA/4ZJ/mIiz2q1hA==" }, "@types/validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-i1aY7RKb6HmQIEnK0cBmUZUp1URx0riIHw/GYNoZ46Su0GWfLiDmMI8zMRmaauMnOTg2bQag0qfwcyUFC9Tn+A==", + "version": "10.11.1", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-10.11.1.tgz", + "integrity": "sha512-bVhLqvb+5xUNWRFnuuecRVISTvsG6AdhrB2kb/tChgtuTTqARqlQ3rLhOPy8cINZEUB8PkR+goyWF6fWxg4iSw==", "dev": true }, "@types/ws": { @@ -252,11 +252,6 @@ "@types/node": "*" } }, - "JSONSelect": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz", - "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40=" - }, "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", @@ -264,9 +259,9 @@ "dev": true }, "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", "dev": true, "requires": { "es6-promisify": "^5.0.0" @@ -584,11 +579,6 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" }, - "cjson": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.2.1.tgz", - "integrity": "sha1-c82KrWXZ4VBfmvF0TTt5wVJ2gqU=" - }, "cliui": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", @@ -607,15 +597,15 @@ "dev": true }, "codecov": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.3.0.tgz", - "integrity": "sha512-S70c3Eg9SixumOvxaKE/yKUxb9ihu/uebD9iPO2IR73IdP4i6ZzjXEULj3d0HeyWPr0DqBfDkjNBWxURjVO5hw==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.5.0.tgz", + "integrity": "sha512-/OsWOfIHaQIr7aeZ4pY0UC1PZT6kimoKFOFYFNb6wxo3iw12nRrh+mNGH72rnXxNsq6SGfesVPizm/6Q3XqcFQ==", "dev": true, "requires": { "argv": "^0.0.2", "ignore-walk": "^3.0.1", - "js-yaml": "^3.12.0", - "teeny-request": "^3.7.0", + "js-yaml": "^3.13.1", + "teeny-request": "^3.11.3", "urlgrey": "^0.4.4" } }, @@ -634,15 +624,10 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "colors": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", - "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=" - }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "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" } @@ -728,7 +713,8 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true }, "define-properties": { "version": "1.1.3", @@ -760,11 +746,6 @@ "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=" }, - "ebnf-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz", - "integrity": "sha1-zR9rpHfFY4xAyX7ZtXLbW6tdgzE=" - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -819,9 +800,9 @@ } }, "es6-promise": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.6.tgz", - "integrity": "sha512-aRVgGdnmW2OiySVPUC9e6m+plolMAJKjZnQlCwNSuK5yQ0JN61DZSO1X1Ufd1foqWRAlig0rhduTCHe7sVtK5Q==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, "es6-promisify": { @@ -840,19 +821,23 @@ "dev": true }, "escodegen": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-0.0.21.tgz", - "integrity": "sha1-U9ZSz6EDA4gnlFilJmxf/HCcY8M=", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", + "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", + "dev": true, "requires": { - "esprima": "~1.0.2", - "estraverse": "~0.0.4", - "source-map": ">= 0.1.2" + "esprima": "^2.7.1", + "estraverse": "^1.9.1", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.2.0" }, "dependencies": { "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", + "dev": true } } }, @@ -862,14 +847,16 @@ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "estraverse": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-0.0.4.tgz", - "integrity": "sha1-AaCTLf7ldGhKWYr1pnw7+bZCjbI=" + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", + "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", + "dev": true }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, "event-stream": { "version": "3.3.4", @@ -933,7 +920,8 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true }, "fill-keys": { "version": "1.0.2", @@ -1136,9 +1124,9 @@ } }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1295,9 +1283,9 @@ } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "interpret": { "version": "1.2.0", @@ -1440,31 +1428,12 @@ "wordwrap": "^1.0.0" }, "dependencies": { - "escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", - "dev": true, - "requires": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.2.0" - } - }, "esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, - "estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", - "dev": true - }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", @@ -1483,50 +1452,9 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true - }, - "source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "jison": { - "version": "0.4.13", - "resolved": "https://registry.npmjs.org/jison/-/jison-0.4.13.tgz", - "integrity": "sha1-kEFwfWIkE2f1iDRTK58ZwsNvrHg=", - "requires": { - "JSONSelect": "0.4.0", - "cjson": "~0.2.1", - "ebnf-parser": "~0.1.9", - "escodegen": "0.0.21", - "esprima": "1.0.x", - "jison-lex": "0.2.x", - "lex-parser": "~0.1.3", - "nomnom": "1.5.2" - }, - "dependencies": { - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" } } }, - "jison-lex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/jison-lex/-/jison-lex-0.2.1.tgz", - "integrity": "sha1-rEuBXozOUTLrErXfz+jXB7iETf4=", - "requires": { - "lex-parser": "0.1.x", - "nomnom": "1.5.2" - } - }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1557,6 +1485,11 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, + "json-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-stream/-/json-stream-1.0.0.tgz", + "integrity": "sha1-GjhU4o0rvuqzHMfd9oPS3cVlJwg=" + }, "json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", @@ -1570,28 +1503,10 @@ "graceful-fs": "^4.1.6" } }, - "jsonpath": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.0.1.tgz", - "integrity": "sha512-HY5kSg82LHIs0r0h9gYBwpNc1w1qGY0qJ7al01W1bJltsN2lp+mjjA/a79gXWuvD6Xf8oPkD2d5uKMZQXTGzqA==", - "requires": { - "esprima": "1.2.2", - "jison": "0.4.13", - "static-eval": "2.0.2", - "underscore": "1.7.0" - }, - "dependencies": { - "esprima": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", - "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" - }, - "underscore": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz", - "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=" - } - } + "jsonpath-plus": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-0.19.0.tgz", + "integrity": "sha512-GSVwsrzW9LsA5lzsqe4CkuZ9wp+kxBb2GwNniaWzI2YFn5Ig42rSW8ZxVpWXaAfakXNrx5pgY5AbQq7kzX29kg==" }, "jsprim": { "version": "1.4.1", @@ -1623,16 +1538,12 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" } }, - "lex-parser": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz", - "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA=" - }, "line-stream": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/line-stream/-/line-stream-0.0.0.tgz", @@ -1674,9 +1585,9 @@ } }, "lolex": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.0.1.tgz", - "integrity": "sha512-UHuOBZ5jjsKuzbB/gRNNW8Vg8f00Emgskdq2kvZxgBJCS0aqquAuXai/SkWORlKeZEiNQWZjFZOqIUcH9LqKCw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.1.0.tgz", + "integrity": "sha512-BYxIEXiVq5lGIXeVHnsFzqa1TxN5acnKnPCdlZSpzm8viNEOhiigupA4vTQ9HEFQ6nLTQ9wQOgBknJgzUYQ9Aw==", "dev": true }, "makeerror": { @@ -1790,12 +1701,32 @@ "yargs-unparser": "1.5.0" }, "dependencies": { + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "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" + } + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, "supports-color": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", @@ -1917,15 +1848,15 @@ "dev": true }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "neo-async": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.0.tgz", - "integrity": "sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, "nice-try": { @@ -1935,24 +1866,16 @@ "dev": true }, "nise": { - "version": "1.4.10", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz", - "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.0.tgz", + "integrity": "sha512-Z3sfYEkLFzFmL8KY6xnSJLRxwQwYBjOXi/24lb62ZnZiGA0JUzGGTI6TBIgfCSMIDl9Jlu8SRmHNACLTemDHww==", "dev": true, "requires": { "@sinonjs/formatio": "^3.1.0", "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", - "lolex": "^2.3.2", + "lolex": "^4.1.0", "path-to-regexp": "^1.7.0" - }, - "dependencies": { - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", - "dev": true - } } }, "node-environment-flags": { @@ -1974,27 +1897,11 @@ } }, "node-fetch": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.5.0.tgz", - "integrity": "sha512-YuZKluhWGJwCcUu4RlZstdAxr8bFfOVHakc1mplwHkk8J+tqM1Y5yraYvIUpeX8aY7+crCwiELJq7Vl0o0LWXw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", + "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", "dev": true }, - "nomnom": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.5.2.tgz", - "integrity": "sha1-9DRUSKhTz71cDSYyDyR3qwUm/i8=", - "requires": { - "colors": "0.5.x", - "underscore": "1.1.x" - }, - "dependencies": { - "underscore": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz", - "integrity": "sha1-QLq4S60Z0jAJbo1u9ii/8FXYPbA=" - } - } - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", @@ -2061,9 +1968,9 @@ } }, "open": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.2.0.tgz", - "integrity": "sha512-Vxf6HJkwrqmvh9UAID3MnMYXntbTxKLOSfOnO7LJdzPf3NE3KQYFNV0/Lcz2VAndbRFil58XVCyh8tiX11fiYw==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.3.0.tgz", + "integrity": "sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==", "requires": { "is-wsl": "^1.1.0" } @@ -2090,6 +1997,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -2242,12 +2150,13 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true }, "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "proxyquire": { "version": "2.1.0", @@ -2272,9 +2181,9 @@ } }, "psl": { - "version": "1.1.31", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.31.tgz", - "integrity": "sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==" + "version": "1.1.33", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.33.tgz", + "integrity": "sha512-LTDP2uSrsc7XCb5lO7A8BI1qYxRe/8EqlRvMeEl6rsnYAqDOl8xHR+8lSAIVfrNaSAlTPTNOCgNjWcoUL3AZsw==" }, "pump": { "version": "1.0.3", @@ -2398,9 +2307,9 @@ "dev": true }, "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", + "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", "requires": { "path-parse": "^1.0.6" } @@ -2416,9 +2325,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.0.0.tgz", - "integrity": "sha512-0UewU+9rFapKFnlbirLi3byoOuhrSsli/z/ihNnvM24vgF+8sNBiI1LZPBSH9wJKUwaUbw+s3hToDLCXkrghrQ==" + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.1.tgz", + "integrity": "sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ==" }, "set-blocking": { "version": "2.0.0", @@ -2496,10 +2405,14 @@ "dev": true }, "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "optional": true + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", + "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", + "dev": true, + "optional": true, + "requires": { + "amdefine": ">=0.0.4" + } }, "source-map-support": { "version": "0.5.12", @@ -2548,44 +2461,6 @@ "tweetnacl": "~0.14.0" } }, - "static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", - "requires": { - "escodegen": "^1.8.1" - }, - "dependencies": { - "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "optional": true - } - } - }, "stream-combiner": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", @@ -2758,14 +2633,14 @@ "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "tslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.16.0.tgz", - "integrity": "sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz", + "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -2774,7 +2649,7 @@ "commander": "^2.12.1", "diff": "^3.2.0", "glob": "^7.1.1", - "js-yaml": "^3.13.0", + "js-yaml": "^3.13.1", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "resolve": "^1.3.2", @@ -2817,6 +2692,7 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -2833,15 +2709,15 @@ "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" }, "typescript": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz", - "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz", + "integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==", "dev": true }, "uglify-js": { - "version": "3.5.9", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.5.9.tgz", - "integrity": "sha512-WpT0RqsDtAWPNJK955DEnb6xjymR8Fn0OlK4TT4pS0ASYsVPqr5ELhgwOwLCP5J5vHeJ4xmMmz3DEgdqC10JeQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", "dev": true, "optional": true, "requires": { @@ -2912,9 +2788,9 @@ "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "validator": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-10.11.0.tgz", - "integrity": "sha512-X/p3UZerAIsbBfN/IwahhYaBbY68EN/UQBWHtsbXGT5bfrH/p4NQzUCG1kF/rtKaNpnJ7jAu6NGTdSNtyNIXMw==" + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-11.0.0.tgz", + "integrity": "sha512-+wnGLYqaKV2++nUv60uGzUJyJQwYVOin6pn1tgEiFCeCQO60yeu3Og9/yPccbBX574kxIcEJicogkzx6s6eyag==" }, "verror": { "version": "1.10.0", @@ -2927,9 +2803,9 @@ } }, "vscode": { - "version": "1.1.33", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.33.tgz", - "integrity": "sha512-sXedp2oF6y4ZvqrrFiZpeMzaCLSWV+PpYkIxjG/iYquNZ9KrLL2LujltGxPLvzn49xu2sZkyC+avVNFgcJD1Iw==", + "version": "1.1.34", + "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.34.tgz", + "integrity": "sha512-GuT3tCT2N5Qp26VG4C+iGmWMgg/MuqtY5G5TSOT3U/X6pgjM9LFulJEeqpyf6gdzpI4VyU3ZN/lWPo54UFPuQg==", "dev": true, "requires": { "glob": "^7.1.2", @@ -2938,7 +2814,7 @@ "semver": "^5.4.1", "source-map-support": "^0.5.0", "url-parse": "^1.4.4", - "vscode-test": "^0.1.4" + "vscode-test": "^0.4.1" }, "dependencies": { "browser-stdout": { @@ -3049,9 +2925,9 @@ "integrity": "sha512-3cay8nXKow4BCApP5ywIu+kPfT+NClAvAlhQJTkUtU0Ms/Rm+xeoqkRiKeK5YI9y3fZY7wq6emZoAFywk/WMqA==" }, "vscode-test": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.1.5.tgz", - "integrity": "sha512-s+lbF1Dtasc0yXVB9iQTexBe2JK6HJAUJe3fWezHKIjq+xRw5ZwCMEMBaonFIPy7s95qg2HPTRDR5W4h4kbxGw==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", + "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", "dev": true, "requires": { "http-proxy-agent": "^2.1.0", @@ -3094,7 +2970,8 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true }, "wrap-ansi": { "version": "2.1.0", diff --git a/package.json b/package.json index 280cc639a..fd7d77aaf 100644 --- a/package.json +++ b/package.json @@ -673,17 +673,17 @@ "@types/fs-extra": "^5.0.5", "@types/js-yaml": "^3.12.1", "@types/mkdirp": "^0.5.2", - "@types/mocha": "^5.2.6", - "@types/node": "^11.13.8", + "@types/mocha": "^5.2.7", + "@types/node": "^12.0.10", "@types/request": "^2.48.1", "@types/shelljs": "^0.8.5", "@types/sinon": "^5.0.7", "@types/sinon-chai": "^3.2.2", "@types/string-format": "^2.0.0", "@types/tmp": "0.0.34", - "@types/validator": "^10.11.0", + "@types/validator": "^10.11.1", "chai": "^4.2.0", - "codecov": "^3.3.0", + "codecov": "^3.5.0", "decache": "^4.5.1", "glob": "^7.1.3", "istanbul": "^0.4.5", @@ -694,13 +694,13 @@ "sinon": "^7.3.2", "sinon-chai": "^3.3.0", "tmp": "0.0.33", - "tslint": "^5.16.0", - "typescript": "^3.4.5", - "vscode": "^1.1.33", + "tslint": "^5.18.0", + "typescript": "^3.5.2", + "vscode": "^1.1.34", "walker": "^1.0.7" }, "dependencies": { - "@kubernetes/client-node": "^0.8.2", + "@kubernetes/client-node": "^0.10.2", "binary-search": "^1.3.5", "byline": "^5.0.0", "event-stream": "3.3.4", @@ -710,15 +710,15 @@ "hasha": "^5.0.0", "js-yaml": "^3.13.1", "mkdirp": "^0.5.1", - "open": "^6.2.0", + "open": "^6.3.0", "request": "^2.88.0", "request-progress": "^3.0.0", - "semver": "^6.0.0", + "semver": "^6.1.1", "shelljs": "^0.8.3", "string-format": "^2.0.0", "targz": "^1.0.1", "unzip-stream": "^0.3.0", - "validator": "^10.11.0", + "validator": "^11.0.0", "vscode-kubernetes-tools-api": "0.0.7" } } diff --git a/src/cli.ts b/src/cli.ts index 68742a612..80688c93d 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -37,7 +37,7 @@ export class Cli implements ICli { opts.maxBuffer = 2*1024*1024; } childProcess.exec(cmd, opts, (error: ExecException, stdout: string, stderr: string) => { - const stdoutFiltered = stdout.replace(/---[\s\S]*$/g, '').trim() + const stdoutFiltered = stdout.replace(/---[\s\S]*$/g, '').trim(); this.odoChannel.print(stdoutFiltered); this.odoChannel.print(stderr); // do not reject it here, because caller in some cases need the error and the streams diff --git a/src/k8s/deployment.ts b/src/k8s/deployment.ts index e26dd4673..54223f7a2 100644 --- a/src/k8s/deployment.ts +++ b/src/k8s/deployment.ts @@ -29,6 +29,7 @@ class Build implements ClusterExplorerV1.Node, ClusterExplorerV1.ClusterExplorer readonly kind: ClusterExplorerV1.ResourceKind = this.resourceKind; public id: string; public resourceId: string; + // tslint:disable-next-line:variable-name constructor(readonly namespace: string, readonly name: string, readonly number: number, readonly metadata?: any) { this.id = this.resourceId = `build/${this.name}`; } diff --git a/src/openshift/cluster.ts b/src/openshift/cluster.ts index dc3cfc417..c082c29a0 100644 --- a/src/openshift/cluster.ts +++ b/src/openshift/cluster.ts @@ -5,11 +5,30 @@ import { OpenShiftObject, Command } from "../odo"; import { OpenShiftItem } from './openshiftItem'; -import { window, commands, env } from 'vscode'; +import { window, commands, env, QuickPickItem } from 'vscode'; import { CliExitData, Cli } from "../cli"; import open = require("open"); import { TokenStore } from "../util/credentialManager"; +import { KubeConfigUtils } from '../util/kubeUtils'; + +class CreateUrlItem implements QuickPickItem { + + constructor() { } + + get label(): string { return `$(plus) Provide new URL...`; } + get description(): string { return ''; } + +} + +class CreateUserItem implements QuickPickItem { + + constructor() { } + + get label(): string { return `$(plus) Add new user...`; } + get description(): string { return ''; } + +} export class Cluster extends OpenShiftItem { static async logout(): Promise { @@ -61,13 +80,18 @@ export class Cluster extends OpenShiftItem { } static async getUrl(): Promise { + const k8sConfig = new KubeConfigUtils(); const clusterURl = await Cluster.getUrlFromClipboard(); - return await window.showInputBox({ - value: clusterURl, - ignoreFocusOut: true, - prompt: "Provide URL of the cluster to connect", - validateInput: (value: string) => Cluster.validateUrl('Invalid URL provided', value) - }); + const createUrl = new CreateUrlItem(); + const clusterItems = await k8sConfig.getServers(); + const choice = await window.showQuickPick([createUrl, ...clusterItems], {placeHolder: "Provide Cluster URL to connect"}); + return (choice.label === createUrl.label) ? + await window.showInputBox({ + value: clusterURl, + ignoreFocusOut: true, + prompt: "Provide new Cluster URL to connect", + validateInput: (value: string) => Cluster.validateUrl('Invalid URL provided', value) + }) : choice.label; } static async login(): Promise { @@ -103,25 +127,42 @@ export class Cluster extends OpenShiftItem { static async credentialsLogin(skipConfirmation: boolean = false): Promise { let password: string; const response = await Cluster.requestLoginConfirmation(skipConfirmation); + if (response !== 'Yes') return null; + const clusterURL = await Cluster.getUrl(); + if (!clusterURL) return null; + const getUserName = await TokenStore.getUserName(); - const username = await window.showInputBox({ - ignoreFocusOut: true, - prompt: "Provide Username for basic authentication to the API server", - value: getUserName, - validateInput: (value: string) => Cluster.emptyName('User name cannot be empty', value) - }); + const k8sConfig = new KubeConfigUtils(); + const users = await k8sConfig.getClusterUsers(clusterURL); + const addUser = new CreateUserItem(); + const choice = await window.showQuickPick([addUser, ...users], {placeHolder: "Select username for basic authentication to the API server"}); + + if (!choice) return null; + + const username = (choice.label === addUser.label) ? + await window.showInputBox({ + ignoreFocusOut: true, + prompt: "Provide Username for basic authentication to the API server", + value: "", + validateInput: (value: string) => Cluster.emptyName('User name cannot be empty', value) + }) : choice.label; + if (getUserName) password = await TokenStore.getItem('login', username); + if (!username) return null; + const passwd = await window.showInputBox({ ignoreFocusOut: true, password: true, prompt: "Provide Password for basic authentication to the API server", value: password }); + if (!passwd) return null; + return Promise.resolve() .then(() => Cluster.odo.execute(Command.odoLoginWithUsernamePassword(clusterURL, username, passwd))) .then((result) => Cluster.save(username, passwd, password, result)) @@ -171,4 +212,4 @@ export class Cluster extends OpenShiftItem { return Promise.reject(result.stderr); } } -} \ No newline at end of file +} diff --git a/src/openshift/component.ts b/src/openshift/component.ts index ae269b801..bfd1b176b 100644 --- a/src/openshift/component.ts +++ b/src/openshift/component.ts @@ -164,7 +164,7 @@ export class Component extends OpenShiftItem { "For which Component you want to push the changes"); if (!component) return null; Component.setPushCmd(component.getName(), component.getParent().getName(), component.getParent().getParent().getName()); - Component.odo.executeInTerminal(Command.pushComponent(component.getParent().getParent().getName(), component.getParent().getName(), component.getName())) + Component.odo.executeInTerminal(Command.pushComponent(component.getParent().getParent().getName(), component.getParent().getName(), component.getName())); } static async lastPush() { diff --git a/src/util/kubeUtils.ts b/src/util/kubeUtils.ts new file mode 100644 index 000000000..dea100d1f --- /dev/null +++ b/src/util/kubeUtils.ts @@ -0,0 +1,35 @@ +import { QuickPickItem } from "vscode"; +import { KubeConfig } from '@kubernetes/client-node'; +import { User, Cluster } from "@kubernetes/client-node/dist/config_types"; + +export class KubeConfigUtils extends KubeConfig { + + constructor() { + super(); + this.loadFromDefault(); + }; + + async getServers(): Promise { + const currentCluster = this.getCurrentCluster(); + const clusters = this.clusters || []; + return clusters.map((c: any) => ({ + label: c.server, + description: currentCluster && c.name === currentCluster.name ? 'Current Context' : '' + })); + } + + async getClusterUsers(clusterServer: string): Promise { + const currentUser = this.getCurrentUser(); + const cluster = this.findCluster(clusterServer); + const users = this.getUsers(); + const clusterUsers = users.filter((item) => cluster && item.name.indexOf(cluster.name) > -1); + return clusterUsers.map((u: User) => ({ + label: u.name.split('/')[0], + description: u === currentUser ? 'Current Context' : '' + })); + } + + findCluster(clusterServer: string): Cluster { + return this.getClusters().find((cluster: Cluster) => cluster.server === clusterServer); + } +} \ No newline at end of file diff --git a/test/openshift/cluster.test.ts b/test/openshift/cluster.test.ts index 9528283ae..e62d15d9b 100644 --- a/test/openshift/cluster.test.ts +++ b/test/openshift/cluster.test.ts @@ -65,9 +65,8 @@ suite('Openshift/Cluster', () => { suite('login', () => { setup(() => { - inputStub.onFirstCall().resolves(testUrl); - inputStub.onSecondCall().resolves(testUser); - inputStub.onThirdCall().resolves(password); + quickPickStub.onFirstCall().resolves({description: "Current Context", label: testUrl}); + quickPickStub.onSecondCall().resolves({description: "Current Context", label: testUser}); }); test('exits if login confirmation declined', async () => { @@ -79,6 +78,10 @@ suite('Openshift/Cluster', () => { }); test('wraps incoming errors', async () => { + quickPickStub.resolves('Credentials'); + quickPickStub.onSecondCall().resolves({description: "Current Context", label: testUrl}); + quickPickStub.onThirdCall().resolves({description: "Current Context", label: testUser}); + inputStub.resolves(password); commandStub.rejects(error); try { @@ -103,16 +106,12 @@ suite('Openshift/Cluster', () => { expect(status).null; }); - test('logins to new cluster if user answer yes to a warning', async () => { - loginStub.resolves(false); - infoStub.resolves('Yes'); - const status = await Cluster.login(); - - expect(status).equals(`Successfully logged in to '${testUrl}'`); - }); - suite('credentials', () => { + setup(() => { + inputStub.resolves(password); + }); + test('logins to new cluster if user answer yes to a warning', async () => { loginStub.resolves(false); infoStub.resolves('Yes'); @@ -135,7 +134,7 @@ suite('Openshift/Cluster', () => { }); test('happy path works', async () => { - const status = await Cluster.login(); + const status = await Cluster.credentialsLogin(); expect(status).equals(`Successfully logged in to '${testUrl}'`); expect(execStub).calledOnceWith(Command.odoLoginWithUsernamePassword(testUrl, testUser, password)); @@ -143,15 +142,15 @@ suite('Openshift/Cluster', () => { }); (keytar ? test : test.skip)('returns with no username set', async () => { - inputStub.onSecondCall().resolves(); - const status = await Cluster.login(); + quickPickStub.onSecondCall().resolves({description: "Current Context", label: undefined}); + const status = await Cluster.credentialsLogin(); expect(status).null; }); test('returns with no password set', async () => { - inputStub.onThirdCall().resolves(); - const status = await Cluster.login(); + inputStub.resolves(); + const status = await Cluster.credentialsLogin(); expect(status).null; }); @@ -160,7 +159,7 @@ suite('Openshift/Cluster', () => { execStub.resolves(errorData); try { - await Cluster.login(); + await Cluster.credentialsLogin(); expect.fail(); } catch (err) { expect(err).equals(`Failed to login to cluster '${testUrl}' with '${error}'!`); @@ -168,22 +167,25 @@ suite('Openshift/Cluster', () => { }); test('checks cluster url name is valid url', async () => { - let result; + let result: string | Thenable; + quickPickStub.onFirstCall().resolves({description: "Current Context", label: `$(plus) Provide new URL...`}); inputStub.onFirstCall().callsFake((options?: vscode.InputBoxOptions, token?: vscode.CancellationToken): Thenable => { result = options.validateInput('http://127.0.0.1:9999'); return Promise.resolve('http://127.0.0.1:9999'); }); - await Cluster.login(); + await Cluster.credentialsLogin(); expect(result).is.null; }); test('checks user name is not empty', async () => { - let result; - inputStub.onSecondCall().callsFake((options?: vscode.InputBoxOptions, token?: vscode.CancellationToken): Thenable => { + let result: string | Thenable; + quickPickStub.onFirstCall().resolves({description: "Current Context", label: testUrl}); + quickPickStub.onSecondCall().resolves({description: "Current Context", label: `$(plus) Add new user...`}); + inputStub.onFirstCall().callsFake((options?: vscode.InputBoxOptions, token?: vscode.CancellationToken): Thenable => { result = options.validateInput('goodvalue'); return Promise.resolve('goodvalue'); }); - await Cluster.login(); + await Cluster.credentialsLogin(); expect(result).is.null; }); }); @@ -192,7 +194,7 @@ suite('Openshift/Cluster', () => { setup(() => { sandbox.stub(vscode.env.clipboard, 'readText').resolves('oc login https://162.165.64.43:8443 --token=bX6eP0d4IRgXwWuCKq2856h5fyK9c2U5tOKCwFeEmQA'); quickPickStub.resolves('Token'); - inputStub.onSecondCall().resolves('token'); + inputStub.resolves('token'); }); test('logins to new cluster if user answer yes to a warning', async () => { @@ -217,16 +219,23 @@ suite('Openshift/Cluster', () => { }); test('happy path works', async () => { - const status = await Cluster.login(); + const status = await Cluster.tokenLogin(); expect(status).equals(`Successfully logged in to '${testUrl}'`); expect(execStub).calledOnceWith(Command.odoLoginWithToken(testUrl, token)); expect(commandStub).calledOnceWith('setContext', 'isLoggedIn', true); }); + test('returns with no url set', async () => { + quickPickStub.onFirstCall().resolves({description: "Current Context", label: undefined}); + const status = await Cluster.tokenLogin(); + + expect(status).null; + }); + test('returns with no token set', async () => { - inputStub.onSecondCall().resolves(); - const status = await Cluster.login(); + inputStub.onFirstCall().resolves(); + const status = await Cluster.tokenLogin(); expect(status).null; }); @@ -234,7 +243,7 @@ suite('Openshift/Cluster', () => { test('handles incoming errors the same way as credentials login', async () => { execStub.rejects(error); try { - await Cluster.login(); + await Cluster.tokenLogin(); expect.fail(); } catch (err) { expect(err).equals(`Failed to login to cluster '${testUrl}' with '${error}'!`); @@ -299,10 +308,11 @@ suite('Openshift/Cluster', () => { test('throws errors from subsequent login', async () => { execStub.onSecondCall().resolves(errorData); - infoStub.onFirstCall().resolves('Yes'); - inputStub.onFirstCall().resolves(testUrl); - inputStub.onSecondCall().resolves(testUser); - inputStub.onThirdCall().resolves(password); + infoStub.resolves('Yes'); + quickPickStub.onFirstCall().resolves('Credentials'); + quickPickStub.onSecondCall().resolves({description: "Current Context", label: testUrl}); + quickPickStub.onThirdCall().resolves({description: "Current Context", label: testUrl}); + inputStub.resolves(password); try { await Cluster.logout(); @@ -362,4 +372,4 @@ suite('Openshift/Cluster', () => { }); }); -}); \ No newline at end of file +});