diff --git a/Tasks/FtpUploadV2/_buildConfigs/Node20/Tests/package-lock.json b/Tasks/FtpUploadV2/_buildConfigs/Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..04ef5eaf8472
--- /dev/null
+++ b/Tasks/FtpUploadV2/_buildConfigs/Node20/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "ftp-upload-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/Tasks/FtpUploadV2/_buildConfigs/Node20/Tests/package.json b/Tasks/FtpUploadV2/_buildConfigs/Node20/Tests/package.json
new file mode 100644
index 000000000000..5d38af358649
--- /dev/null
+++ b/Tasks/FtpUploadV2/_buildConfigs/Node20/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "ftp-upload-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines FTP Upload V2 Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.7"
+ }
+}
diff --git a/Tasks/FtpUploadV2/_buildConfigs/Node20/package-lock.json b/Tasks/FtpUploadV2/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..883fd0ed7a5c
--- /dev/null
+++ b/Tasks/FtpUploadV2/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,488 @@
+{
+ "name": "FTP",
+ "version": "2.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
+ "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw=="
+ },
+ "@types/node": {
+ "version": "20.8.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz",
+ "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "basic-ftp": {
+ "version": "4.6.6",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-4.6.6.tgz",
+ "integrity": "sha512-5nTclY5mVxjeFoq9cBTzgQvcM1UfeGTd4hCCvb8AgC88wHMDQCD4UX5hZo2jaiSh96Nf+gFy1joNI9iH639bvQ=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/FtpUploadV2/_buildConfigs/Node20/package.json b/Tasks/FtpUploadV2/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..0f1786d8d8d2
--- /dev/null
+++ b/Tasks/FtpUploadV2/_buildConfigs/Node20/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "FTP",
+ "version": "2.0.0",
+ "description": "FTP Upload Task",
+ "main": "ftpuploadtask.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^9.1.1",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0",
+ "basic-ftp": "^4.6.6"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/FtpUploadV2/ftpuploadtask.ts b/Tasks/FtpUploadV2/ftpuploadtask.ts
index 655ad9e029a5..09c619f3fd83 100644
--- a/Tasks/FtpUploadV2/ftpuploadtask.ts
+++ b/Tasks/FtpUploadV2/ftpuploadtask.ts
@@ -84,7 +84,9 @@ class ProgressTracker {
function findFiles(ftpOptions: FtpOptions): string[] {
tl.debug("Searching for files to upload");
-
+#if NODE20
+ let error: any | undefined;
+#endif
try {
const rootFolderStats = tl.stats(ftpOptions.rootFolder);
if (rootFolderStats.isFile()) {
@@ -153,7 +155,12 @@ function findFiles(ftpOptions: FtpOptions): string[] {
return Array.from(matchingFilesSet).sort();
}
catch (err) {
+#if NODE20
+ err = error;
+ tl.error(error);
+#else
tl.error(err);
+#endif
tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
}
@@ -294,10 +301,18 @@ async function run() {
}
let ftpClient: ftp.Client;
+#if NODE20
+ let error: any | undefined;
+#endif
try {
ftpClient = await getFtpClient(ftpOptions);
} catch (err) {
+#if NODE20
+ error = err;
+ tl.error(error);
+#else
tl.error(err);
+#endif
tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
return;
}
@@ -314,7 +329,12 @@ async function run() {
return;
} catch (err) {
e = err;
+#if NODE20
+ error = err;
+ tl.warning(error);
+#else
tl.warning(err);
+#endif
ftpClient.close();
await sleep(1000);
@@ -381,7 +401,12 @@ async function run() {
console.log(tl.loc("UploadSucceedMsg", tracker.getSuccessStatusMessage()));
} catch (err) {
+#if NODE20
+ error = err;
+ tl.error(error);
+#else
tl.error(err);
+#endif
console.log(tracker.getFailureStatusMessage());
tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
} finally {
diff --git a/Tasks/FtpUploadV2/task.json b/Tasks/FtpUploadV2/task.json
index 34f7b17c698f..53a7391fa0f0 100644
--- a/Tasks/FtpUploadV2/task.json
+++ b/Tasks/FtpUploadV2/task.json
@@ -19,7 +19,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"minimumAgentVersion": "2.182.1",
"instanceNameFormat": "FTP Upload: $(rootFolder)",
diff --git a/Tasks/FtpUploadV2/task.loc.json b/Tasks/FtpUploadV2/task.loc.json
index 5f2c2f88f0c9..87961b05690b 100644
--- a/Tasks/FtpUploadV2/task.loc.json
+++ b/Tasks/FtpUploadV2/task.loc.json
@@ -19,7 +19,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"minimumAgentVersion": "2.182.1",
"instanceNameFormat": "ms-resource:loc.instanceNameFormat",
diff --git a/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/Tests/package-lock.json b/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..90797e6bb0da
--- /dev/null
+++ b/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/Tests/package-lock.json
@@ -0,0 +1,24 @@
+{
+ "name": "vsts-tasks-installapplecertificate-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "10.17.44",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz",
+ "integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/Tests/package.json b/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/Tests/package.json
new file mode 100644
index 000000000000..9fa5cc3342f7
--- /dev/null
+++ b/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/Tests/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "vsts-tasks-installapplecertificate-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install Apple Certificate Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^10.17.0",
+ "@types/mocha": "^5.2.7"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/package-lock.json b/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..6fac092773fb
--- /dev/null
+++ b/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,587 @@
+{
+ "name": "vsts-tasks-installapplecertificate",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-ios-signing-common": {
+ "version": "2.227.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-ios-signing-common/-/azure-pipelines-tasks-ios-signing-common-2.227.0.tgz",
+ "integrity": "sha512-Y1FEKwHE/mT4aa37qBUMs78yYLw0FRqxFPE26pA7SSFrIcz1LuaGhDJA3o94AmEAyfJxIk+S61TFMgLkqLM/lQ==",
+ "requires": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/package.json b/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..b30597966996
--- /dev/null
+++ b/Tasks/InstallAppleCertificateV2/_buildConfigs/Node20/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installapplecertificate",
+ "version": "1.0.0",
+ "description": "Azure Pipelines InstallAppleCertificate Task",
+ "main": "preinstallcert.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^5.2.7",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0",
+ "azure-pipelines-tasks-ios-signing-common": "2.227.0",
+ "azure-pipelines-task-lib": "^4.0.0-preview"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/InstallAppleCertificateV2/make.json b/Tasks/InstallAppleCertificateV2/make.json
index b5764390adad..a935c9e8b738 100644
--- a/Tasks/InstallAppleCertificateV2/make.json
+++ b/Tasks/InstallAppleCertificateV2/make.json
@@ -3,9 +3,7 @@
{
"items": [
"node_modules/azure-pipelines-tasks-ios-signing-common/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tasks-ios-signing-common/node_modules/mockery",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/InstallAppleCertificateV2/task.json b/Tasks/InstallAppleCertificateV2/task.json
index 4c7d22f161f4..ce28c037a015 100644
--- a/Tasks/InstallAppleCertificateV2/task.json
+++ b/Tasks/InstallAppleCertificateV2/task.json
@@ -14,7 +14,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"releaseNotes": "Fixes codesign hangs on a self hosted agent. A Keychain password is now required to use `Default Keychain` or `Custom Keychain`. Microsoft hosted builds should use `Temporary Keychain`.",
"runsOn": [
diff --git a/Tasks/InstallAppleCertificateV2/task.loc.json b/Tasks/InstallAppleCertificateV2/task.loc.json
index ecaada4a01df..aef6d17c853f 100644
--- a/Tasks/InstallAppleCertificateV2/task.loc.json
+++ b/Tasks/InstallAppleCertificateV2/task.loc.json
@@ -14,7 +14,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"releaseNotes": "ms-resource:loc.releaseNotes",
"runsOn": [
diff --git a/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/Tests/package-lock.json b/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..0ada066fbb1f
--- /dev/null
+++ b/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/Tests/package.json b/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/Tests/package.json
new file mode 100644
index 000000000000..f0ab0daa9f61
--- /dev/null
+++ b/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install Apple Provisioning Profile Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.7"
+ }
+}
diff --git a/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/package-lock.json b/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..a8ef560fab49
--- /dev/null
+++ b/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,586 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-ios-signing-common": {
+ "version": "2.0.3-preview",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-ios-signing-common/-/azure-pipelines-tasks-ios-signing-common-2.0.3-preview.tgz",
+ "integrity": "sha512-Q973Mzd4ciIH+U9SvY5Cx5YsTOHHt8FiNY6+x/6fmAnKIjEc4VoYzJG5Qk3xNt+KMjrYxPakpQHqWNdPwgAo7Q==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-pipelines-task-lib": "^3.0.6-preview.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/package.json b/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..41e98db54f59
--- /dev/null
+++ b/Tasks/InstallAppleProvisioningProfileV1/_buildConfigs/Node20/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile",
+ "version": "1.0.0",
+ "description": "Azure Pipelines InstallAppleProvisioningProfile Task",
+ "main": "preinstallprovprofile.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "azure-pipelines-tasks-ios-signing-common": "2.0.3-preview",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^20.3.1"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/InstallAppleProvisioningProfileV1/make.json b/Tasks/InstallAppleProvisioningProfileV1/make.json
index baa1d44bdd49..a935c9e8b738 100644
--- a/Tasks/InstallAppleProvisioningProfileV1/make.json
+++ b/Tasks/InstallAppleProvisioningProfileV1/make.json
@@ -3,8 +3,7 @@
{
"items": [
"node_modules/azure-pipelines-tasks-ios-signing-common/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/InstallAppleProvisioningProfileV1/task.json b/Tasks/InstallAppleProvisioningProfileV1/task.json
index 1fc046bed1d0..5a5fa6731b97 100644
--- a/Tasks/InstallAppleProvisioningProfileV1/task.json
+++ b/Tasks/InstallAppleProvisioningProfileV1/task.json
@@ -14,7 +14,7 @@
"version": {
"Major": 1,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"runsOn": [
"Agent",
diff --git a/Tasks/InstallAppleProvisioningProfileV1/task.loc.json b/Tasks/InstallAppleProvisioningProfileV1/task.loc.json
index f96bd829bbd5..3e245697bc24 100644
--- a/Tasks/InstallAppleProvisioningProfileV1/task.loc.json
+++ b/Tasks/InstallAppleProvisioningProfileV1/task.loc.json
@@ -14,7 +14,7 @@
"version": {
"Major": 1,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"runsOn": [
"Agent",
diff --git a/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/Tests/package-lock.json b/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..7137c41478aa
--- /dev/null
+++ b/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "vsts-tasks-installsshkey-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz",
+ "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==",
+ "dev": true
+ }
+ }
+}
diff --git a/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/Tests/package.json b/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/Tests/package.json
new file mode 100644
index 000000000000..0273a49261c0
--- /dev/null
+++ b/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "vsts-tasks-installsshkey-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install SSH Key Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.0"
+ }
+}
diff --git a/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/package-lock.json b/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..caf97c052327
--- /dev/null
+++ b/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,555 @@
+{
+ "name": "vsts-tasks-installsshkey",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/package.json b/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..f0978563362c
--- /dev/null
+++ b/Tasks/InstallSSHKeyV0/_buildConfigs/Node20/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installsshkey",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install SSK Key Task",
+ "main": "preinstallsshkey.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/q": "^1.5.1",
+ "@types/mocha": "^5.2.7",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/InstallSSHKeyV0/make.json b/Tasks/InstallSSHKeyV0/make.json
index 4188c590d806..54872a7f7368 100644
--- a/Tasks/InstallSSHKeyV0/make.json
+++ b/Tasks/InstallSSHKeyV0/make.json
@@ -2,8 +2,7 @@
"rm": [
{
"items": [
- "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/InstallSSHKeyV0/task.json b/Tasks/InstallSSHKeyV0/task.json
index ba2943b59d0e..efb139556c6f 100644
--- a/Tasks/InstallSSHKeyV0/task.json
+++ b/Tasks/InstallSSHKeyV0/task.json
@@ -14,7 +14,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"runsOn": [
"Agent",
diff --git a/Tasks/InstallSSHKeyV0/task.loc.json b/Tasks/InstallSSHKeyV0/task.loc.json
index 7c0f68ed9080..28ca4b2095ef 100644
--- a/Tasks/InstallSSHKeyV0/task.loc.json
+++ b/Tasks/InstallSSHKeyV0/task.loc.json
@@ -14,7 +14,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"runsOn": [
"Agent",
diff --git a/Tasks/JavaToolInstallerV0/_buildConfigs/Node20/package-lock.json b/Tasks/JavaToolInstallerV0/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..4aac9f127540
--- /dev/null
+++ b/Tasks/JavaToolInstallerV0/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,3771 @@
+{
+ "name": "java-tool-installer",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@azure/msal-common": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz",
+ "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw=="
+ },
+ "@azure/msal-node": {
+ "version": "1.14.5",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.5.tgz",
+ "integrity": "sha512-NcVdMfn8Z3ogN+9RjOSF7uwf2Gki5DEJl0BdDSL83KUAgVAobtkZi5W8EqxbJLrTO/ET0jv5DregrcR5qg2pEA==",
+ "requires": {
+ "@azure/msal-common": "^9.0.1",
+ "jsonwebtoken": "^8.5.1",
+ "uuid": "^8.3.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
+ }
+ },
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/jsonwebtoken": {
+ "version": "8.5.9",
+ "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz",
+ "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@types/uuid": {
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz",
+ "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA=="
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "artifact-engine": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/artifact-engine/-/artifact-engine-1.2.0.tgz",
+ "integrity": "sha512-EsLKSNIeZfTks57ek0lR3iJA49hrX4Ju2Qb6CaEzK5uSXX0OXR/iD3Mqstit31UPvXhmG7qcnTFBz4lMswIxIg==",
+ "requires": {
+ "azure-pipelines-task-lib": "^3.4.0",
+ "handlebars": "4.7.7",
+ "minimatch": "^3.0.5",
+ "tunnel": "0.0.4"
+ },
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.17.10",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz",
+ "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw=="
+ },
+ "@babel/core": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz",
+ "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==",
+ "requires": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.18.2",
+ "@babel/helper-compilation-targets": "^7.18.2",
+ "@babel/helper-module-transforms": "^7.18.0",
+ "@babel/helpers": "^7.18.2",
+ "@babel/parser": "^7.18.0",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.2",
+ "@babel/types": "^7.18.2",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz",
+ "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==",
+ "requires": {
+ "@babel/types": "^7.18.2",
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "jsesc": "^2.5.1"
+ },
+ "dependencies": {
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz",
+ "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ }
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz",
+ "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==",
+ "requires": {
+ "@babel/compat-data": "^7.17.10",
+ "@babel/helper-validator-option": "^7.16.7",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz",
+ "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ=="
+ },
+ "@babel/helper-function-name": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
+ "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/types": "^7.17.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
+ "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
+ "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz",
+ "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==",
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/helper-simple-access": "^7.17.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.0",
+ "@babel/types": "^7.18.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz",
+ "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==",
+ "requires": {
+ "@babel/types": "^7.18.2"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
+ "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
+ "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ=="
+ },
+ "@babel/helpers": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz",
+ "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==",
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.2",
+ "@babel/types": "^7.18.2"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.17.12",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz",
+ "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz",
+ "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg=="
+ },
+ "@babel/template": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
+ "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/parser": "^7.16.7",
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz",
+ "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==",
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.18.2",
+ "@babel/helper-environment-visitor": "^7.18.2",
+ "@babel/helper-function-name": "^7.17.9",
+ "@babel/helper-hoist-variables": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/parser": "^7.18.0",
+ "@babel/types": "^7.18.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.2.tgz",
+ "integrity": "sha512-0On6B8A4/+mFUto5WERt3EEuG1NznDirvwca1O8UwXQHVY8g3R7OzYgxXdOfMwLO08UrpUD/2+3Bclyq+/C94Q==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ }
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz",
+ "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz",
+ "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz",
+ "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz",
+ "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==",
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+ "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "requires": {
+ "type-detect": "4.0.8"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
+ }
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
+ "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
+ "requires": {
+ "@sinonjs/commons": "^1.3.0",
+ "array-from": "^2.1.1",
+ "lodash": "^4.17.15"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ=="
+ },
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "2.0.29",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-2.0.29.tgz",
+ "integrity": "sha1-UALhT3Xi1x5WQoHfBDHIwbSio2o="
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/mockery": {
+ "version": "1.4.29",
+ "resolved": "https://registry.npmjs.org/@types/mockery/-/mockery-1.4.29.tgz",
+ "integrity": "sha1-m6It838H43gP/4Ux0aOOYz+UV6U="
+ },
+ "@types/node": {
+ "version": "10.17.51",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.51.tgz",
+ "integrity": "sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "@types/xml2js": {
+ "version": "0.4.8",
+ "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.8.tgz",
+ "integrity": "sha512-EyvT83ezOdec7BhDaEcsklWy7RSIdi6CNe95tmOAK0yx/Lm30C9K75snT3fYayK59ApC2oyW+rcHErdG05FHJA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "append-transform": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
+ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
+ "requires": {
+ "default-require-extensions": "^3.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-from": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
+ "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="
+ },
+ "async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
+ },
+ "browserslist": {
+ "version": "4.20.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
+ "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001332",
+ "electron-to-chromium": "^1.4.118",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.3",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "caching-transform": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
+ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
+ "requires": {
+ "hasha": "^5.0.0",
+ "make-dir": "^3.0.0",
+ "package-hash": "^4.0.0",
+ "write-file-atomic": "^3.0.0"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001342",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001342.tgz",
+ "integrity": "sha512-bn6sOCu7L7jcbBbyNhLg0qzXdJ/PMbybZTH/BA6Roet9wxYRm6Tr9D0s0uhLkOZ6MSG+QU6txUgdpr3MXIVqjA=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "requires": {
+ "assertion-error": "^1.0.1",
+ "deep-eql": "^0.1.3",
+ "type-detect": "^1.0.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ }
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "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"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ }
+ }
+ },
+ "convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "deep-eql": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
+ "requires": {
+ "type-detect": "0.1.1"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+ "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI="
+ }
+ }
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "default-require-extensions": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
+ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
+ "requires": {
+ "strip-bom": "^4.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
+ },
+ "electron-to-chromium": {
+ "version": "1.4.138",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.138.tgz",
+ "integrity": "sha512-IOyp2Seq3w4QLln+yZWcMF3VXhhduz4bwg9gfI+CnP5TkzwNXQ8FCZuwwPsnes73AfWdf5J2n2OXdUwDUspDPQ=="
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
+ },
+ "foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "requires": {
+ "samsam": "1.x"
+ }
+ },
+ "fromentries": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
+ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg=="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "hasha": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
+ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
+ "requires": {
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw=="
+ },
+ "istanbul-lib-hook": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
+ "requires": {
+ "append-transform": "^2.0.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "istanbul-lib-processinfo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
+ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+ "requires": {
+ "archy": "^1.0.0",
+ "cross-spawn": "^7.0.0",
+ "istanbul-lib-coverage": "^3.0.0-alpha.1",
+ "make-dir": "^3.0.0",
+ "p-map": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "uuid": "^3.3.3"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz",
+ "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==",
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
+ "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="
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI="
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "lolex": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.0.tgz",
+ "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg=="
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ },
+ "mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "requires": {
+ "minimist": "^1.2.6"
+ }
+ },
+ "mocha": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
+ "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ }
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
+ }
+ }
+ },
+ "mocha-tap-reporter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/mocha-tap-reporter/-/mocha-tap-reporter-0.1.3.tgz",
+ "integrity": "sha1-Emy70vggZJXnKxWZFNOXuOoXoig=",
+ "requires": {
+ "mocha": "*"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w=="
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE="
+ },
+ "nconf": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz",
+ "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==",
+ "requires": {
+ "async": "^3.0.0",
+ "ini": "^2.0.0",
+ "secure-keys": "^1.0.0",
+ "yargs": "^16.1.1"
+ }
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ },
+ "nise": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz",
+ "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==",
+ "requires": {
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "lolex": "^5.0.1",
+ "path-to-regexp": "^1.7.0"
+ },
+ "dependencies": {
+ "@sinonjs/formatio": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
+ "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
+ "requires": {
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+ "just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg=="
+ },
+ "lolex": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
+ "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ }
+ }
+ },
+ "nock": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/nock/-/nock-9.1.0.tgz",
+ "integrity": "sha512-u9QOLOZP0DlcKzmAzCuX5PRsIhbiRJupR7hJn1cCCT7VW3ZKUrEH/oxGEtVA8Xbu4EmzH9d/VK0x/3FxCGRrRg==",
+ "requires": {
+ "chai": ">=1.9.2 <4.0.0",
+ "debug": "^2.2.0",
+ "deep-equal": "^1.0.0",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "~4.17.2",
+ "mkdirp": "^0.5.0",
+ "propagate": "0.4.0",
+ "qs": "^6.0.2",
+ "semver": "^5.3.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "node-preload": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
+ "requires": {
+ "process-on-spawn": "^1.0.0"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "nyc": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
+ "requires": {
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "caching-transform": "^4.0.0",
+ "convert-source-map": "^1.7.0",
+ "decamelize": "^1.2.0",
+ "find-cache-dir": "^3.2.0",
+ "find-up": "^4.1.0",
+ "foreground-child": "^2.0.0",
+ "get-package-type": "^0.1.0",
+ "glob": "^7.1.6",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-hook": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-processinfo": "^2.0.2",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.2",
+ "make-dir": "^3.0.0",
+ "node-preload": "^0.2.1",
+ "p-map": "^3.0.0",
+ "process-on-spawn": "^1.0.0",
+ "resolve-from": "^5.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "spawn-wrap": "^2.0.0",
+ "test-exclude": "^6.0.0",
+ "yargs": "^15.0.2"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.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": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "package-hash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
+ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
+ "requires": {
+ "graceful-fs": "^4.1.15",
+ "hasha": "^5.0.0",
+ "lodash.flattendeep": "^4.4.0",
+ "release-zalgo": "^1.0.0"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "process-on-spawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
+ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
+ "requires": {
+ "fromentries": "^1.2.0"
+ }
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "propagate": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.4.0.tgz",
+ "integrity": "sha1-8/zKCm/gZzanulcpZgaWF8EwtIE="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ }
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "release-zalgo": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
+ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
+ "requires": {
+ "es6-error": "^4.0.1"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg=="
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "secure-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz",
+ "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o="
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "sinon": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.0.1.tgz",
+ "integrity": "sha512-4qIY0pCWCvGCJpV/1JkFu9kbsNEZ9O34cG1oru/c7OCDtrEs50Gq/VjkA2ID5ZwLyoNx1i1ws118oh/p6fVeDg==",
+ "requires": {
+ "diff": "^3.1.0",
+ "formatio": "1.2.0",
+ "lodash.get": "^4.4.2",
+ "lolex": "^2.1.3",
+ "native-promise-only": "^0.8.1",
+ "nise": "^1.1.1",
+ "path-to-regexp": "^1.7.0",
+ "samsam": "^1.1.3",
+ "text-encoding": "0.6.4",
+ "type-detect": "^4.0.0"
+ },
+ "dependencies": {
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "spawn-wrap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
+ "requires": {
+ "foreground-child": "^2.0.0",
+ "is-windows": "^1.0.2",
+ "make-dir": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "which": "^2.0.1"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk="
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tunnel": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
+ "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM="
+ },
+ "type-detect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI="
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ=="
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "optional": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
+ },
+ "workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw=="
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
+ "xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~9.0.1"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="
+ }
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
+ }
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
+ },
+ "async-mutex": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz",
+ "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
+ },
+ "aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ },
+ "azp-tasks-az-blobstorage-provider": {
+ "version": "2.219.1",
+ "resolved": "https://registry.npmjs.org/azp-tasks-az-blobstorage-provider/-/azp-tasks-az-blobstorage-provider-2.219.1.tgz",
+ "integrity": "sha512-crTVPRVneukXgYNrcznH9jWAtB0K9+Bg19UWzzVl30+Hn5LLlypn6U9uWekj4XV38iiMCR9XwZgw3j+S8Z0h+Q==",
+ "requires": {
+ "artifact-engine": "1.2.0",
+ "azure-pipelines-task-lib": "^3.4.0",
+ "azure-storage": "^2.10.7",
+ "q": "1.4.1"
+ },
+ "dependencies": {
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ }
+ }
+ }
+ }
+ },
+ "azure-devops-node-api": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.1.0.tgz",
+ "integrity": "sha512-VY+G45eNKVJfMIO0uyZfbi4PzUR8JHEfsHQjEUAXUGRkYhhBbhGHjy8cpiyYFxLXc3a4PL5cqgqqV/YD1SaCXg==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ }
+ }
+ },
+ "azure-pipelines-tasks-azure-arm-rest": {
+ "version": "3.223.6",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.223.6.tgz",
+ "integrity": "sha512-jQeanC/MlqySO3WgUBIxDMDnDG9FnzF1a1qJVSPbPmdKmdIdtFLhuNaB1vxkN1eqgZB6QvpOdY4g3bxQH57Epw==",
+ "requires": {
+ "@azure/msal-node": "1.14.5",
+ "@types/jsonwebtoken": "^8.5.8",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.17.0",
+ "@types/q": "1.5.4",
+ "async-mutex": "^0.4.0",
+ "azure-devops-node-api": "^12.0.0",
+ "azure-pipelines-task-lib": "^3.4.0",
+ "https-proxy-agent": "^4.0.0",
+ "jsonwebtoken": "^8.5.1",
+ "node-fetch": "^2.6.7",
+ "q": "1.5.1",
+ "typed-rest-client": "1.8.4",
+ "xml2js": "0.4.13"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "xml2js": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.13.tgz",
+ "integrity": "sha512-BoxD65qWA2p4znzbaati/Td19uFEc0X6ydj0bFphJO62RrNaGqOyW6ljLWPo3GKDbvW/6dnxAoRX01BsgEWsMA==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": ">=2.4.6"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-utility-common": {
+ "version": "3.225.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.225.1.tgz",
+ "integrity": "sha512-4wtVKuvx2PcQI0W8xkMdS/S+tf9Qu7wMJl4HSTLE1gjQ2x9o/6QbhMogz6O1+8ofxvTqmI4scA7GHKccDAwQpQ==",
+ "requires": {
+ "@types/node": "^16.11.39",
+ "azure-pipelines-task-lib": "^4.4.0",
+ "azure-pipelines-tool-lib": "^2.0.0-preview",
+ "js-yaml": "3.13.1",
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "16.18.46",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz",
+ "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg=="
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz",
+ "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.1.0",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ }
+ }
+ },
+ "azure-storage": {
+ "version": "2.10.7",
+ "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.10.7.tgz",
+ "integrity": "sha512-4oeFGtn3Ziw/fGs/zkoIpKKtygnCVIcZwzJ7UQzKTxhkGQqVCByOFbYqMGYR3L+wOsunX9lNfD0jc51SQuKSSA==",
+ "requires": {
+ "browserify-mime": "^1.2.9",
+ "extend": "^3.0.2",
+ "json-edm-parser": "~0.1.2",
+ "json-schema": "~0.4.0",
+ "md5.js": "^1.3.4",
+ "readable-stream": "^2.0.0",
+ "request": "^2.86.0",
+ "underscore": "^1.12.1",
+ "uuid": "^3.0.0",
+ "validator": "^13.7.0",
+ "xml2js": "~0.2.8",
+ "xmlbuilder": "^9.0.7"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browserify-mime": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz",
+ "integrity": "sha512-uz+ItyJXBLb6wgon1ELEiVowJBEsy03PUWGRQU7cxxx9S+DW2hujPp+DaMYEOClRPzsn7NB99NtJ6pGnt8y+CQ=="
+ },
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "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": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ }
+ }
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "requires": {
+ "agent-base": "5",
+ "debug": "4"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+ },
+ "json-edm-parser": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz",
+ "integrity": "sha512-J1U9mk6lf8dPULcaMwALXB6yel3cJyyhk9Z8FQ4sMwiazNwjaUhegIcpZyZFNMvLRtnXwh+TkCjX9uYUObBBYA==",
+ "requires": {
+ "jsonparse": "~1.2.0"
+ }
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "jsonparse": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz",
+ "integrity": "sha512-LkDEYtKnPFI9hQ/IURETe6F1dUH80cbRkaF6RaViSwoSNPwaxQpi6TgJGvJKyLQ2/9pQW+XCxK3hBoR44RAjkg=="
+ },
+ "jsonwebtoken": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
+ "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+ "requires": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "requires": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
+ },
+ "lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
+ },
+ "lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
+ },
+ "lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "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.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "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==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sax": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+ "integrity": "sha512-c0YL9VcSfcdH3F1Qij9qpYJFpKFKMXNOkLWFssBL3RuF7ZS8oZhllR2rWlCRjDTJsfq3R6wbSsaRU6o0rkEdNw=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz",
+ "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "validator": {
+ "version": "13.11.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz",
+ "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ }
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "xml2js": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz",
+ "integrity": "sha512-ZHZBIAO55GHCn2jBYByVPHvHS+o3j8/a/qmpEe6kxO3cTnTCWC3Htq9RYJ5G4XMwMMClD2QkXA9SNdPadLyn3Q==",
+ "requires": {
+ "sax": "0.5.x"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ=="
+ }
+ }
+}
diff --git a/Tasks/JavaToolInstallerV0/_buildConfigs/Node20/package.json b/Tasks/JavaToolInstallerV0/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..16a222d9e4cf
--- /dev/null
+++ b/Tasks/JavaToolInstallerV0/_buildConfigs/Node20/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "java-tool-installer",
+ "private": "true",
+ "description": "Java Tool Installer",
+ "main": "javaToolInstaller.js",
+ "scripts": {
+ "build": "node ../../make.js build --task JavaToolInstallerV0",
+ "test": "node ../../make.js test --task JavaToolInstallerV0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "keywords": [
+ "Azure",
+ "Pipelines",
+ "Tasks",
+ "Java"
+ ],
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^20.3.1",
+ "@types/q": "^1.0.7",
+ "agent-base": "^6.0.2",
+ "azp-tasks-az-blobstorage-provider": "^2.219.1",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "azure-pipelines-tasks-azure-arm-rest": "3.223.6",
+ "azure-pipelines-tasks-utility-common": "^3.0.3",
+ "azure-pipelines-tool-lib": "^2.0.0-preview"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/JavaToolInstallerV0/make.json b/Tasks/JavaToolInstallerV0/make.json
index 8ebf735d2f15..556b28ffb53f 100644
--- a/Tasks/JavaToolInstallerV0/make.json
+++ b/Tasks/JavaToolInstallerV0/make.json
@@ -15,16 +15,7 @@
"node_modules/azp-tasks-az-blobstorage-provider/node_modules/azure-pipelines-task-lib",
"node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/vsts-task-lib",
"node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib",
- "node_modules/azp-tasks-az-blobstorage-provider/node_modules/vsts-task-lib",
- "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/mockery",
- "node_modules/azp-tasks-az-blobstorage-provider/node_modules/mockery",
- "node_modules/artifact-engine/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tool-lib/node_modules/mockery",
- "node_modules/artifact-engine/node_modules/@types/mockery",
- "node_modules/https-proxy-agent/node_modules/agent-base",
- "node_modules/artifact-engine/node_modules/mockery",
- "node_modules/mockery"
-
+ "node_modules/artifact-engine/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/JavaToolInstallerV0/task.json b/Tasks/JavaToolInstallerV0/task.json
index de9747cd3822..3529aea0205e 100644
--- a/Tasks/JavaToolInstallerV0/task.json
+++ b/Tasks/JavaToolInstallerV0/task.json
@@ -14,7 +14,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"satisfies": [
"Java",
diff --git a/Tasks/JavaToolInstallerV0/task.loc.json b/Tasks/JavaToolInstallerV0/task.loc.json
index b92890d2d300..5bd520139e5d 100644
--- a/Tasks/JavaToolInstallerV0/task.loc.json
+++ b/Tasks/JavaToolInstallerV0/task.loc.json
@@ -14,7 +14,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"satisfies": [
"Java",
diff --git a/Tasks/JenkinsQueueJobV2/_buildConfigs/Node20/package-lock.json b/Tasks/JenkinsQueueJobV2/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..3cf4ec2f13d4
--- /dev/null
+++ b/Tasks/JenkinsQueueJobV2/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,790 @@
+{
+ "name": "vsts-tasks-jenkinsqueuejob",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/shelljs": {
+ "version": "0.3.33",
+ "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.3.33.tgz",
+ "integrity": "sha512-aOCtSks3f3Fo31Fi13r53qBQ3hnjUY/0+LJsBSB9n1fn6AaolBtJZbEXLPhfvZQwv58NGBUB1hDWPoWH5LLkvw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
+ },
+ "aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "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": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "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.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "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==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/JenkinsQueueJobV2/_buildConfigs/Node20/package.json b/Tasks/JenkinsQueueJobV2/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..fe0d2e9b5581
--- /dev/null
+++ b/Tasks/JenkinsQueueJobV2/_buildConfigs/Node20/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-jenkinsqueuejob",
+ "description": "Azure Pipelines Jenkins Queue Job Task",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "scripts": {
+ "build": "node ../../make.js build --task JenkinsQueueJobV2",
+ "test": "node ../../make.js test --task JenkinsQueueJobV2"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/q": "^1.0.7",
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^5.2.7",
+ "@types/shelljs": "^0.3.0",
+ "request": "^2.88.2",
+ "azure-pipelines-task-lib": "^4.0.0-preview"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/JenkinsQueueJobV2/jobqueue.ts b/Tasks/JenkinsQueueJobV2/jobqueue.ts
index e0da4df8183b..ebd4af7c6870 100644
--- a/Tasks/JenkinsQueueJobV2/jobqueue.ts
+++ b/Tasks/JenkinsQueueJobV2/jobqueue.ts
@@ -24,7 +24,11 @@ export class JobQueue {
this.TaskOptions = taskOptions;
}
+#if NODE20
+ private intervalId: NodeJS.Timeout;
+#else
private intervalId: NodeJS.Timer;
+#endif
private intervalMillis: number = 100;
public Start(): void {
diff --git a/Tasks/JenkinsQueueJobV2/task.json b/Tasks/JenkinsQueueJobV2/task.json
index 1ef6b783a081..b41515606e1d 100644
--- a/Tasks/JenkinsQueueJobV2/task.json
+++ b/Tasks/JenkinsQueueJobV2/task.json
@@ -15,7 +15,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"groups": [
{
diff --git a/Tasks/JenkinsQueueJobV2/task.loc.json b/Tasks/JenkinsQueueJobV2/task.loc.json
index c858e96fb759..c8cebde3ead8 100644
--- a/Tasks/JenkinsQueueJobV2/task.loc.json
+++ b/Tasks/JenkinsQueueJobV2/task.loc.json
@@ -15,7 +15,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"groups": [
{
diff --git a/Tasks/MSBuildV1/_buildConfigs/Node20/package-lock.json b/Tasks/MSBuildV1/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..c86547498753
--- /dev/null
+++ b/Tasks/MSBuildV1/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,524 @@
+{
+ "name": "vsts-tasks-msbuild",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
+ "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-msbuildhelpers": {
+ "version": "3.219.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-msbuildhelpers/-/azure-pipelines-tasks-msbuildhelpers-3.219.1.tgz",
+ "integrity": "sha512-imvS6BgCPVbTKLyyXIp8jzdxRXyy0y70tWXzLooM3EZro4GnODjSVJhpHJJXWEqDrhloN8dUs9VWbfLlpVtdPg==",
+ "requires": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.17.0",
+ "azure-pipelines-task-lib": "^3.3.1"
+ },
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/MSBuildV1/_buildConfigs/Node20/package.json b/Tasks/MSBuildV1/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..49fc8a112cb6
--- /dev/null
+++ b/Tasks/MSBuildV1/_buildConfigs/Node20/package.json
@@ -0,0 +1,23 @@
+{
+ "name": "vsts-tasks-msbuild",
+ "description": "Azure Pipelines MSBuild Task",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/mocha": "^9.1.1",
+ "@types/node": "^20.3.1",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "azure-pipelines-tasks-msbuildhelpers": "^3.210.1"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/MSBuildV1/make.json b/Tasks/MSBuildV1/make.json
index 9bb75414c09a..5093abeb19ab 100644
--- a/Tasks/MSBuildV1/make.json
+++ b/Tasks/MSBuildV1/make.json
@@ -2,8 +2,7 @@
"rm": [
{
"items": [
- "node_modules/azure-pipelines-tasks-msbuildhelpers/node_modules/azure-pipelines-task-lib",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tasks-msbuildhelpers/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/MSBuildV1/task.json b/Tasks/MSBuildV1/task.json
index d6ac9d1acb82..7be6c26ae681 100644
--- a/Tasks/MSBuildV1/task.json
+++ b/Tasks/MSBuildV1/task.json
@@ -13,7 +13,7 @@
"version": {
"Major": 1,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"demands": [
"msbuild"
diff --git a/Tasks/MSBuildV1/task.loc.json b/Tasks/MSBuildV1/task.loc.json
index fae9cf692bcf..cdf8bc788d3d 100644
--- a/Tasks/MSBuildV1/task.loc.json
+++ b/Tasks/MSBuildV1/task.loc.json
@@ -13,7 +13,7 @@
"version": {
"Major": 1,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"demands": [
"msbuild"
diff --git a/Tasks/MavenV3/_buildConfigs/Node20/package-lock.json b/Tasks/MavenV3/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..0675f365da04
--- /dev/null
+++ b/Tasks/MavenV3/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,2938 @@
+{
+ "name": "Agent.Tasks.Maven",
+ "version": "2.208.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.12.11",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz",
+ "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==",
+ "requires": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.19.1",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
+ "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w=="
+ },
+ "@babel/highlight": {
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg=="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ }
+ }
+ },
+ "@eslint/eslintrc": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz",
+ "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==",
+ "requires": {
+ "ajv": "^6.12.4",
+ "debug": "^4.1.1",
+ "espree": "^7.3.0",
+ "globals": "^13.9.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^3.13.1",
+ "minimatch": "^3.0.4",
+ "strip-json-comments": "^3.1.1"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ }
+ }
+ },
+ "@humanwhocodes/config-array": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz",
+ "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==",
+ "requires": {
+ "@humanwhocodes/object-schema": "^1.2.0",
+ "debug": "^4.1.1",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "@humanwhocodes/object-schema": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
+ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
+ },
+ "@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ },
+ "@sinonjs/fake-timers": {
+ "version": "9.1.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
+ "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ },
+ "dependencies": {
+ "@sinonjs/commons": {
+ "version": "1.8.6",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
+ "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ }
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz",
+ "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==",
+ "requires": {
+ "@sinonjs/commons": "^2.0.0",
+ "lodash.get": "^4.4.2",
+ "type-detect": "^4.0.8"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
+ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ=="
+ },
+ "@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw=="
+ },
+ "@types/cheerio": {
+ "version": "0.22.0",
+ "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.0.tgz",
+ "integrity": "sha512-dVL3RISC1jdrXilyqmPIga6LmjHwrDbWQoUyHuf/bGjP+HiNtyFJ3Gga1FCu55UYOqbuUGLPzkGkcsplkpSm8Q=="
+ },
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/ini": {
+ "version": "1.3.30",
+ "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz",
+ "integrity": "sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ=="
+ },
+ "@types/jsdom": {
+ "version": "16.2.14",
+ "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.14.tgz",
+ "integrity": "sha512-6BAy1xXEmMuHeAJ4Fv4yXKwBDTGTOseExKE3OaHiNycdHdZw59KfYzrt0DkDluvwmik1HRt6QS7bImxUmpSy+w==",
+ "requires": {
+ "@types/node": "*",
+ "@types/parse5": "*",
+ "@types/tough-cookie": "*"
+ }
+ },
+ "@types/ltx": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/@types/ltx/-/ltx-2.8.0.tgz",
+ "integrity": "sha512-qHnPVD0FFquypl7Yy8qqvDjhnX3c7toUYjjALK+bug7MfR2WCRTIjw+GUMfehRi/Mbhj5rLAQerPTnTCUzSCWg==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
+ "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw=="
+ },
+ "@types/mockery": {
+ "version": "1.4.29",
+ "resolved": "https://registry.npmjs.org/@types/mockery/-/mockery-1.4.29.tgz",
+ "integrity": "sha512-SwFMxO68Z6ERGFpPYBdmgfS5LloELzY16h/PMAhnxMog91JcHI5AJjW0HN56cGUPhV0nDb8xNWsJkhuDzr4lAQ=="
+ },
+ "@types/node": {
+ "version": "16.11.58",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.58.tgz",
+ "integrity": "sha512-uMVxJ111wpHzkx/vshZFb6Qni3BOMnlWLq7q9jrwej7Yw/KvjsEbpxCCxw+hLKxexFMc8YmpG8J9tnEe/rKsIg=="
+ },
+ "@types/parse5": {
+ "version": "6.0.3",
+ "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz",
+ "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
+ },
+ "@types/q": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz",
+ "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "@types/semver": {
+ "version": "7.3.9",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.9.tgz",
+ "integrity": "sha512-L/TMpyURfBkf+o/526Zb6kd/tchUP3iBDEPjqjb+U2MAJhVRxxrmr2fwpe08E7QsV7YLcpq0tUaQ9O9x97ZIxQ=="
+ },
+ "@types/tough-cookie": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz",
+ "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw=="
+ },
+ "@types/uuid": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz",
+ "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A=="
+ },
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
+ },
+ "abab": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
+ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA=="
+ },
+ "acorn": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz",
+ "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ=="
+ },
+ "acorn-globals": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz",
+ "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==",
+ "requires": {
+ "acorn": "^7.1.1",
+ "acorn-walk": "^7.1.1"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ }
+ }
+ },
+ "acorn-jsx": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
+ "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="
+ },
+ "acorn-walk": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz",
+ "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA=="
+ },
+ "adm-zip": {
+ "version": "0.4.16",
+ "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
+ "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg=="
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
+ },
+ "ansi-regex": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
+ "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "astral-regex": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
+ "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-codeanalysis-common": {
+ "version": "2.223.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-codeanalysis-common/-/azure-pipelines-tasks-codeanalysis-common-2.223.0.tgz",
+ "integrity": "sha512-KiLlnTWvS9otMCHxT7OgCCOmlIjP51HpcCLjFtJFChRwb0VDcX/UFFB/KBskAUiOSSjAYNTZDVvkMnDrMPiM5Q==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "azure-pipelines-task-lib": "^3.1.0",
+ "cheerio": "1.0.0-rc.10",
+ "fs-extra": "^0.30.0",
+ "glob": "7.1.0",
+ "mocha": "^8.4.0",
+ "os": "^0.1.1",
+ "rewire": "^6.0.0",
+ "sinon": "^14.0.0",
+ "strip-bom": "^3.0.0",
+ "xml2js": "^0.4.17"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "glob": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.0.tgz",
+ "integrity": "sha512-htk4y5TQ9NjktQk5oR7AudqzQKZd4JvbCOklhnygiF6r9ExeTrl+dTwFql7y5+zaHkc/QeLdDrcF5GVfM5bl9w==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.2",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ }
+ }
+ },
+ "azure-pipelines-tasks-codecoverage-tools": {
+ "version": "2.201.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-codecoverage-tools/-/azure-pipelines-tasks-codecoverage-tools-2.201.0.tgz",
+ "integrity": "sha512-3yl6vbw62gXWxBxMYi5XOF0Rq7JE3KjQtZHDeTDSNLGttsjlm88jEnYU+lsjOqFtnUbnWTX8HB96Vx5c5iL+fA==",
+ "requires": {
+ "@types/cheerio": "0.22.0",
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-pipelines-task-lib": "^3.1.0",
+ "cheerio": "1.0.0-rc.6",
+ "fs-extra": "^0.30.0",
+ "os": "^0.1.1",
+ "strip-bom": "^3.0.0",
+ "xml2js": "^0.4.17"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "cheerio": {
+ "version": "1.0.0-rc.6",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.6.tgz",
+ "integrity": "sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==",
+ "requires": {
+ "cheerio-select": "^1.3.0",
+ "dom-serializer": "^1.3.1",
+ "domhandler": "^4.1.0",
+ "htmlparser2": "^6.1.0",
+ "parse5": "^6.0.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-java-common": {
+ "version": "2.198.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-java-common/-/azure-pipelines-tasks-java-common-2.198.1.tgz",
+ "integrity": "sha512-LaEdGpC4/5nt3krZOJNIH8r+ZxOEhxocpTH/J//Vx98LeYC6zLGyrmCdTLBrY58nJ9Bo7PD/0ARrasXFPv5VkQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/semver": "^7.3.3",
+ "azure-pipelines-task-lib": "^3.1.0",
+ "semver": "^7.3.2"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-packaging-common": {
+ "version": "3.201.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-packaging-common/-/azure-pipelines-tasks-packaging-common-3.201.0.tgz",
+ "integrity": "sha512-JYj59tEjkVhhfgVzCxGN31m/74XYUtFGZuvNVVB6XfBcLfKLcWMkiKs/VPvnVX33C/jkUdJnycowsF1V23COhQ==",
+ "requires": {
+ "@types/ini": "1.3.30",
+ "@types/ltx": "2.8.0",
+ "@types/mocha": "^5.2.6",
+ "@types/mockery": "1.4.29",
+ "@types/node": "^10.17.0",
+ "@types/q": "1.5.2",
+ "adm-zip": "^0.4.11",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0",
+ "azure-pipelines-tool-lib": "^1.0.2",
+ "ini": "^1.3.4",
+ "ip-address": "^5.8.9",
+ "ltx": "^2.6.2",
+ "q": "^1.5.0",
+ "semver": "^5.5.0",
+ "typed-rest-client": "1.8.4"
+ },
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "@types/q": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
+ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.3.2.tgz",
+ "integrity": "sha512-PtYcd3E2ouwZhLuaOpWA00FYoLjRuJs1V8mNu3u6lBnqeYd4jh/8VL/of6nchm8f2NM6Div+EEnbOcmWvcptPg==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^3.1.10",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "typed-rest-client": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
+ "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ }
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.0-preview",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.0-preview.tgz",
+ "integrity": "sha512-OeivwKLpLMsvGpZ2H+2UPxFwwqNkV8TzfKByqjYAllzGDAw4BvciAdjCMwkpGdTOnzfPbRpr33sy48kn7RqfKA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
+ "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "base-64": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
+ "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs="
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browser-process-hrtime": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz",
+ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow=="
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "callsites": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
+ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="
+ },
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "cheerio": {
+ "version": "1.0.0-rc.10",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz",
+ "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==",
+ "requires": {
+ "cheerio-select": "^1.5.0",
+ "dom-serializer": "^1.3.2",
+ "domhandler": "^4.2.0",
+ "htmlparser2": "^6.1.0",
+ "parse5": "^6.0.1",
+ "parse5-htmlparser2-tree-adapter": "^6.0.1",
+ "tslib": "^2.2.0"
+ }
+ },
+ "cheerio-select": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz",
+ "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==",
+ "requires": {
+ "css-select": "^4.3.0",
+ "css-what": "^6.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.3.1",
+ "domutils": "^2.8.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz",
+ "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==",
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.1",
+ "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"
+ }
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "css-select": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
+ "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
+ "requires": {
+ "boolbase": "^1.0.0",
+ "css-what": "^6.0.1",
+ "domhandler": "^4.3.1",
+ "domutils": "^2.8.0",
+ "nth-check": "^2.0.1"
+ }
+ },
+ "css-what": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
+ "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw=="
+ },
+ "cssom": {
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz",
+ "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw=="
+ },
+ "cssstyle": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz",
+ "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==",
+ "requires": {
+ "cssom": "~0.3.6"
+ },
+ "dependencies": {
+ "cssom": {
+ "version": "0.3.8",
+ "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",
+ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="
+ }
+ }
+ },
+ "data-urls": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
+ "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==",
+ "requires": {
+ "abab": "^2.0.3",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^8.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="
+ },
+ "decimal.js": {
+ "version": "10.3.1",
+ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz",
+ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ=="
+ },
+ "deep-is": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
+ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
+ },
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "dom-serializer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
+ "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.2.0",
+ "entities": "^2.0.0"
+ }
+ },
+ "domelementtype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
+ "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="
+ },
+ "domexception": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz",
+ "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==",
+ "requires": {
+ "webidl-conversions": "^5.0.0"
+ },
+ "dependencies": {
+ "webidl-conversions": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz",
+ "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA=="
+ }
+ }
+ },
+ "domhandler": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
+ "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
+ "requires": {
+ "domelementtype": "^2.2.0"
+ }
+ },
+ "domutils": {
+ "version": "2.8.0",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
+ "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
+ "requires": {
+ "dom-serializer": "^1.0.1",
+ "domelementtype": "^2.2.0",
+ "domhandler": "^4.2.0"
+ }
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "enquirer": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz",
+ "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==",
+ "requires": {
+ "ansi-colors": "^4.1.1"
+ }
+ },
+ "entities": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
+ "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+ },
+ "escodegen": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz",
+ "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==",
+ "requires": {
+ "esprima": "^4.0.1",
+ "estraverse": "^5.2.0",
+ "esutils": "^2.0.2",
+ "optionator": "^0.8.1",
+ "source-map": "~0.6.1"
+ }
+ },
+ "eslint": {
+ "version": "7.32.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz",
+ "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==",
+ "requires": {
+ "@babel/code-frame": "7.12.11",
+ "@eslint/eslintrc": "^0.4.3",
+ "@humanwhocodes/config-array": "^0.5.0",
+ "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",
+ "escape-string-regexp": "^4.0.0",
+ "eslint-scope": "^5.1.1",
+ "eslint-utils": "^2.1.0",
+ "eslint-visitor-keys": "^2.0.0",
+ "espree": "^7.3.1",
+ "esquery": "^1.4.0",
+ "esutils": "^2.0.2",
+ "fast-deep-equal": "^3.1.3",
+ "file-entry-cache": "^6.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob-parent": "^5.1.2",
+ "globals": "^13.6.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.merge": "^4.6.2",
+ "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": "^6.0.9",
+ "text-table": "^0.2.0",
+ "v8-compile-cache": "^2.0.3"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "levn": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
+ "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
+ "requires": {
+ "prelude-ls": "^1.2.1",
+ "type-check": "~0.4.0"
+ }
+ },
+ "optionator": {
+ "version": "0.9.1",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
+ "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
+ "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"
+ }
+ },
+ "prelude-ls": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
+ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
+ },
+ "semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "type-check": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
+ "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
+ "requires": {
+ "prelude-ls": "^1.2.1"
+ }
+ }
+ }
+ },
+ "eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "requires": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw=="
+ }
+ }
+ },
+ "eslint-utils": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
+ "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "requires": {
+ "eslint-visitor-keys": "^1.1.0"
+ },
+ "dependencies": {
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz",
+ "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw=="
+ },
+ "espree": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz",
+ "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==",
+ "requires": {
+ "acorn": "^7.4.0",
+ "acorn-jsx": "^5.3.1",
+ "eslint-visitor-keys": "^1.3.0"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "7.4.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
+ },
+ "eslint-visitor-keys": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
+ "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ=="
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "esquery": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
+ "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
+ "requires": {
+ "estraverse": "^5.1.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "requires": {
+ "estraverse": "^5.2.0"
+ }
+ },
+ "estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="
+ },
+ "esutils": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
+ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="
+ },
+ "file-entry-cache": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
+ "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
+ "requires": {
+ "flat-cache": "^3.0.4"
+ }
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
+ },
+ "flat-cache": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
+ "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
+ "requires": {
+ "flatted": "^3.1.0",
+ "rimraf": "^3.0.2"
+ },
+ "dependencies": {
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "flatted": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "get-intrinsic": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+ "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "13.20.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
+ "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
+ "requires": {
+ "type-fest": "^0.20.2"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.9",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
+ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ=="
+ },
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA=="
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ },
+ "html-encoding-sniffer": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz",
+ "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==",
+ "requires": {
+ "whatwg-encoding": "^1.0.5"
+ }
+ },
+ "htmlparser2": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
+ "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==",
+ "requires": {
+ "domelementtype": "^2.0.1",
+ "domhandler": "^4.0.0",
+ "domutils": "^2.5.2",
+ "entities": "^2.0.0"
+ }
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-proxy-agent": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
+ "requires": {
+ "@tootallnate/once": "1",
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "https-proxy-agent": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
+ "requires": {
+ "agent-base": "6",
+ "debug": "4"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg=="
+ },
+ "import-fresh": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
+ "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "ip-address": {
+ "version": "5.9.4",
+ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.9.4.tgz",
+ "integrity": "sha512-dHkI3/YNJq4b/qQaz+c8LuarD3pY24JqZWfjB8aZx1gtpc2MDILu9L9jpZe1sHpzo/yWFweQVn+U//FhazUxmw==",
+ "requires": {
+ "jsbn": "1.1.0",
+ "lodash": "^4.17.15",
+ "sprintf-js": "1.1.2"
+ },
+ "dependencies": {
+ "jsbn": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
+ "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
+ }
+ }
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.8.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
+ "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
+ },
+ "is-potential-custom-element-name": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz",
+ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.0.0.tgz",
+ "integrity": "sha512-pqon0s+4ScYUvX30wxQi3PogGFAlUyH0awepWvwkj4jD4v+ova3RiYw8bmA6x2rDrEaj8i/oWKoRxpVNW+Re8Q==",
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "jsdom": {
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz",
+ "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==",
+ "requires": {
+ "abab": "^2.0.5",
+ "acorn": "^8.2.4",
+ "acorn-globals": "^6.0.0",
+ "cssom": "^0.4.4",
+ "cssstyle": "^2.3.0",
+ "data-urls": "^2.0.0",
+ "decimal.js": "^10.2.1",
+ "domexception": "^2.0.1",
+ "escodegen": "^2.0.0",
+ "form-data": "^3.0.0",
+ "html-encoding-sniffer": "^2.0.1",
+ "http-proxy-agent": "^4.0.1",
+ "https-proxy-agent": "^5.0.0",
+ "is-potential-custom-element-name": "^1.0.1",
+ "nwsapi": "^2.2.0",
+ "parse5": "6.0.1",
+ "saxes": "^5.0.1",
+ "symbol-tree": "^3.2.4",
+ "tough-cookie": "^4.0.0",
+ "w3c-hr-time": "^1.0.2",
+ "w3c-xmlserializer": "^2.0.0",
+ "webidl-conversions": "^6.1.0",
+ "whatwg-encoding": "^1.0.5",
+ "whatwg-mimetype": "^2.3.0",
+ "whatwg-url": "^8.5.0",
+ "ws": "^7.4.6",
+ "xml-name-validator": "^3.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "form-data": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ },
+ "tough-cookie": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz",
+ "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==",
+ "requires": {
+ "psl": "^1.1.33",
+ "punycode": "^2.1.1",
+ "universalify": "^0.1.2"
+ }
+ }
+ }
+ },
+ "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-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg=="
+ },
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "requires": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
+ },
+ "lodash.merge": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "lodash.truncate": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
+ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw=="
+ },
+ "log-symbols": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz",
+ "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==",
+ "requires": {
+ "chalk": "^4.0.0"
+ }
+ },
+ "lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "requires": {
+ "yallist": "^4.0.0"
+ }
+ },
+ "ltx": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.10.0.tgz",
+ "integrity": "sha512-RB4zR6Mrp/0wTNS9WxMvpgfht/7u/8QAC9DpPD19opL/4OASPa28uoliFqeDkLUU8pQ4aeAfATBZmz1aSAHkMw==",
+ "requires": {
+ "inherits": "^2.0.4"
+ }
+ },
+ "mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
+ },
+ "mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "requires": {
+ "mime-db": "1.51.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mocha": {
+ "version": "8.4.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.4.0.tgz",
+ "integrity": "sha512-hJaO0mwDXmZS4ghXsvPVriOhsxQ7ofcpQdm8dE+jISUOKopitvnXFQmpRR7jd2K6VBG6E26gU3IAbXXGIbu4sQ==",
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.1",
+ "debug": "4.3.1",
+ "diff": "5.0.0",
+ "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": "4.0.0",
+ "log-symbols": "4.0.0",
+ "minimatch": "3.0.4",
+ "ms": "2.1.3",
+ "nanoid": "3.1.20",
+ "serialize-javascript": "5.0.1",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "which": "2.0.2",
+ "wide-align": "1.1.3",
+ "workerpool": "6.1.0",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
+ "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "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"
+ }
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ }
+ }
+ },
+ "mockery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz",
+ "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "nanoid": {
+ "version": "3.1.20",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.20.tgz",
+ "integrity": "sha512-a1cQNyczgKbLX9jwbS/+d7W8fX/RfgYR7lVWwWOGIPNgK2m0MWvrGF6/m4kk6U3QcFMnZf3RIhL0v2Jgh/0Uxw=="
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
+ },
+ "nise": {
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.4.tgz",
+ "integrity": "sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==",
+ "requires": {
+ "@sinonjs/commons": "^2.0.0",
+ "@sinonjs/fake-timers": "^10.0.2",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "path-to-regexp": "^1.7.0"
+ },
+ "dependencies": {
+ "@sinonjs/fake-timers": {
+ "version": "10.2.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.2.0.tgz",
+ "integrity": "sha512-OPwQlEdg40HAj5KNF8WW6q2KG4Z+cBCZb3m4ninfTZKaBmbIJodviQsDBoYMPHkOyJJMHnOJo5j2+LKDOhOACg==",
+ "requires": {
+ "@sinonjs/commons": "^3.0.0"
+ },
+ "dependencies": {
+ "@sinonjs/commons": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
+ "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ }
+ }
+ }
+ }
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "requires": {
+ "boolbase": "^1.0.0"
+ }
+ },
+ "nwsapi": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
+ "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
+ "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "optionator": {
+ "version": "0.8.3",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz",
+ "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==",
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.6",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "word-wrap": "~1.2.3"
+ }
+ },
+ "os": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz",
+ "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ=="
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "parent-module": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "parse5": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
+ "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
+ },
+ "parse5-htmlparser2-tree-adapter": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+ "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==",
+ "requires": {
+ "parse5": "^6.0.1"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-to-regexp": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
+ "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
+ "requires": {
+ "isarray": "0.0.1"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
+ }
+ }
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA=="
+ },
+ "promise": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz",
+ "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc="
+ },
+ "qs": {
+ "version": "6.10.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
+ "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "readdirp": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz",
+ "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "regexpp": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
+ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg=="
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="
+ },
+ "require-from-string": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
+ "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
+ },
+ "resolve": {
+ "version": "1.22.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
+ "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "requires": {
+ "is-core-module": "^2.8.1",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="
+ },
+ "rewire": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/rewire/-/rewire-6.0.0.tgz",
+ "integrity": "sha512-7sZdz5dptqBCapJYocw9EcppLU62KMEqDLIILJnNET2iqzXHaQfaVP5SOJ06XvjX+dNIDJbzjw0ZWzrgDhtjYg==",
+ "requires": {
+ "eslint": "^7.32.0"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "saxes": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz",
+ "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==",
+ "requires": {
+ "xmlchars": "^2.2.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "serialize-javascript": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
+ "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sinon": {
+ "version": "14.0.2",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz",
+ "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==",
+ "requires": {
+ "@sinonjs/commons": "^2.0.0",
+ "@sinonjs/fake-timers": "^9.1.2",
+ "@sinonjs/samsam": "^7.0.1",
+ "diff": "^5.0.0",
+ "nise": "^5.1.2",
+ "supports-color": "^7.2.0"
+ },
+ "dependencies": {
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "slice-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
+ "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "astral-regex": "^2.0.0",
+ "is-fullwidth-code-point": "^3.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ }
+ }
+ },
+ "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
+ },
+ "sprintf-js": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
+ "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "symbol-tree": {
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
+ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "table": {
+ "version": "6.8.1",
+ "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz",
+ "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==",
+ "requires": {
+ "ajv": "^8.0.1",
+ "lodash.truncate": "^4.4.2",
+ "slice-ansi": "^4.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw=="
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tr46": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz",
+ "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==",
+ "requires": {
+ "punycode": "^2.1.1"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
+ }
+ }
+ },
+ "tslib": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz",
+ "integrity": "sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA=="
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
+ },
+ "type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz",
+ "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.2",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz",
+ "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g=="
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "utf8": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/utf8/-/utf8-2.1.2.tgz",
+ "integrity": "sha1-H6DZJw6b6FDZsFAn9jUZv0ZFfZY="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "v8-compile-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
+ "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="
+ },
+ "w3c-hr-time": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
+ "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==",
+ "requires": {
+ "browser-process-hrtime": "^1.0.0"
+ }
+ },
+ "w3c-xmlserializer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz",
+ "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==",
+ "requires": {
+ "xml-name-validator": "^3.0.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz",
+ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w=="
+ },
+ "whatwg-encoding": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",
+ "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",
+ "requires": {
+ "iconv-lite": "0.4.24"
+ }
+ },
+ "whatwg-mimetype": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",
+ "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="
+ },
+ "whatwg-url": {
+ "version": "8.7.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz",
+ "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==",
+ "requires": {
+ "lodash": "^4.7.0",
+ "tr46": "^2.1.0",
+ "webidl-conversions": "^6.1.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "word-wrap": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
+ "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ=="
+ },
+ "workerpool": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.0.tgz",
+ "integrity": "sha512-toV7q9rWNYha963Pl/qyeZ6wG+3nnsyvolaNUS8+R5Wtw6qJPTxIlOP1ZSvcGhEJw+l3HMMmtiNo9Gl61G4GVg=="
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "ws": {
+ "version": "7.5.7",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.7.tgz",
+ "integrity": "sha512-KMvVuFzpKBuiIXW3E4u3mySRO2/mCHSyZDJQM5NQ9Q9KHWHWh0NHgfbRMLLrceUK5qAL4ytALJbpRMjixFZh8A=="
+ },
+ "xml-name-validator": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",
+ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="
+ },
+ "xml2js": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz",
+ "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~11.0.0"
+ }
+ },
+ "xmlbuilder": {
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
+ },
+ "xmlchars": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz",
+ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+ },
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
+ }
+ }
+}
diff --git a/Tasks/MavenV3/_buildConfigs/Node20/package.json b/Tasks/MavenV3/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..346be5f0e4ec
--- /dev/null
+++ b/Tasks/MavenV3/_buildConfigs/Node20/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "Agent.Tasks.Maven",
+ "version": "2.208.0",
+ "author": "Microsoft Corporation",
+ "description": "Build with Apache Maven",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/vso-agent-tasks/issues"
+ },
+ "dependencies": {
+ "@types/jsdom": "^16.2.14",
+ "@types/node": "^16.11.39",
+ "@types/mocha": "^9.1.1",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0",
+ "azure-pipelines-tool-lib": "^2.0.0-preview",
+ "azure-pipelines-tasks-codeanalysis-common": "2.223.0",
+ "azure-pipelines-tasks-codecoverage-tools": "2.201.0",
+ "azure-pipelines-tasks-java-common": "2.198.1",
+ "azure-pipelines-tasks-packaging-common": "3.201.0",
+ "base-64": "^0.1.0",
+ "fs-extra": "^0.30.0",
+ "jsdom": "^16.7.0",
+ "shelljs": "^0.8.5",
+ "strip-bom": "^3.0.0",
+ "utf8": "^2.1.0",
+ "uuid": "^3.0.1",
+ "xml2js": "^0.4.16"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/Tasks/MavenV3/task.json b/Tasks/MavenV3/task.json
index a25336e7cb84..c0961ead404d 100644
--- a/Tasks/MavenV3/task.json
+++ b/Tasks/MavenV3/task.json
@@ -18,7 +18,7 @@
"version": {
"Major": 3,
"Minor": 229,
- "Patch": 0
+ "Patch": 1
},
"releaseNotes": "Configuration of the SonarQube analysis was moved to the [SonarQube](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarqube) or [SonarCloud](https://marketplace.visualstudio.com/items?itemName=SonarSource.sonarcloud) extensions, in task `Prepare Analysis Configuration`",
"demands": [
diff --git a/Tasks/MavenV3/task.loc.json b/Tasks/MavenV3/task.loc.json
index 452f8ffcc4e3..6693b6db2ea4 100644
--- a/Tasks/MavenV3/task.loc.json
+++ b/Tasks/MavenV3/task.loc.json
@@ -18,7 +18,7 @@
"version": {
"Major": 3,
"Minor": 229,
- "Patch": 0
+ "Patch": 1
},
"releaseNotes": "ms-resource:loc.releaseNotes",
"demands": [
diff --git a/Tasks/NodeToolV0/_buildConfigs/Node20/package-lock.json b/Tasks/NodeToolV0/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..45a09146af9a
--- /dev/null
+++ b/Tasks/NodeToolV0/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,601 @@
+{
+ "name": "nodetool",
+ "version": "0.5.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@types/uuid": {
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz",
+ "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-utility-common": {
+ "version": "3.225.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.225.1.tgz",
+ "integrity": "sha512-4wtVKuvx2PcQI0W8xkMdS/S+tf9Qu7wMJl4HSTLE1gjQ2x9o/6QbhMogz6O1+8ofxvTqmI4scA7GHKccDAwQpQ==",
+ "requires": {
+ "@types/node": "^16.11.39",
+ "azure-pipelines-task-lib": "^4.4.0",
+ "azure-pipelines-tool-lib": "^2.0.0-preview",
+ "js-yaml": "3.13.1",
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "16.18.46",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz",
+ "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg=="
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz",
+ "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.1.0",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz",
+ "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/NodeToolV0/_buildConfigs/Node20/package.json b/Tasks/NodeToolV0/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..25ab0ab2f217
--- /dev/null
+++ b/Tasks/NodeToolV0/_buildConfigs/Node20/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "nodetool",
+ "version": "0.5.1",
+ "description": "Node Tool Installer",
+ "main": "nodetool.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "keywords": [
+ "Azure",
+ "Pipelines",
+ "Tasks",
+ "Node"
+ ],
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^5.2.7",
+ "@types/q": "^1.0.7",
+ "typed-rest-client": "1.8.4",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "azure-pipelines-tool-lib": "^2.0.3",
+ "azure-pipelines-tasks-utility-common": "^3.0.3"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/NodeToolV0/make.json b/Tasks/NodeToolV0/make.json
index b06d72937d12..9df0d9774107 100644
--- a/Tasks/NodeToolV0/make.json
+++ b/Tasks/NodeToolV0/make.json
@@ -12,9 +12,7 @@
{
"items": [
"node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tool-lib/node_modules/mockery",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/NodeToolV0/task.json b/Tasks/NodeToolV0/task.json
index dc3bf8cb6f3f..b964c90a237b 100644
--- a/Tasks/NodeToolV0/task.json
+++ b/Tasks/NodeToolV0/task.json
@@ -14,7 +14,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"satisfies": [
"Node",
diff --git a/Tasks/NodeToolV0/task.loc.json b/Tasks/NodeToolV0/task.loc.json
index ea8b70e7c9ef..d04836d341dd 100644
--- a/Tasks/NodeToolV0/task.loc.json
+++ b/Tasks/NodeToolV0/task.loc.json
@@ -14,7 +14,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"satisfies": [
"Node",
diff --git a/Tasks/PowerShellV2/_buildConfigs/Node20/package-lock.json b/Tasks/PowerShellV2/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..71d7abfd2f58
--- /dev/null
+++ b/Tasks/PowerShellV2/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,584 @@
+{
+ "name": "vsts-powershell-task",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@types/uuid": {
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz",
+ "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-utility-common": {
+ "version": "3.225.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.225.1.tgz",
+ "integrity": "sha512-4wtVKuvx2PcQI0W8xkMdS/S+tf9Qu7wMJl4HSTLE1gjQ2x9o/6QbhMogz6O1+8ofxvTqmI4scA7GHKccDAwQpQ==",
+ "requires": {
+ "@types/node": "^16.11.39",
+ "azure-pipelines-task-lib": "^4.4.0",
+ "azure-pipelines-tool-lib": "^2.0.0-preview",
+ "js-yaml": "3.13.1",
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "16.18.46",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz",
+ "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg=="
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz",
+ "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.1.0",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/PowerShellV2/_buildConfigs/Node20/package.json b/Tasks/PowerShellV2/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..6c118854e049
--- /dev/null
+++ b/Tasks/PowerShellV2/_buildConfigs/Node20/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "vsts-powershell-task",
+ "version": "1.0.0",
+ "description": "Azure Pipelines PowerShell Task",
+ "main": "powershell.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "scripts": {
+ "build": "node ../../make.js build --task PowerShellV2",
+ "test": "node ../../make.js test --task PowerShellV2"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "dependencies": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^20.3.1",
+ "azure-pipelines-task-lib": "^4.4.0",
+ "azure-pipelines-tasks-utility-common": "^3.225.1",
+ "uuid": "^3.0.1"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/PowerShellV2/make.json b/Tasks/PowerShellV2/make.json
index d06d0ed838f2..03fd38de4049 100644
--- a/Tasks/PowerShellV2/make.json
+++ b/Tasks/PowerShellV2/make.json
@@ -26,8 +26,7 @@
{
"items": [
"node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/PowerShellV2/task.json b/Tasks/PowerShellV2/task.json
index 3a1b014a139d..b1dd0972a3e1 100644
--- a/Tasks/PowerShellV2/task.json
+++ b/Tasks/PowerShellV2/task.json
@@ -18,7 +18,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 1
+ "Patch": 4
},
"releaseNotes": "Script task consistency. Added support for macOS and Linux.",
"minimumAgentVersion": "2.115.0",
diff --git a/Tasks/PowerShellV2/task.loc.json b/Tasks/PowerShellV2/task.loc.json
index 792a733e3c1d..d77e4803c42c 100644
--- a/Tasks/PowerShellV2/task.loc.json
+++ b/Tasks/PowerShellV2/task.loc.json
@@ -18,7 +18,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 1
+ "Patch": 4
},
"releaseNotes": "ms-resource:loc.releaseNotes",
"minimumAgentVersion": "2.115.0",
diff --git a/Tasks/PythonScriptV0/_buildConfigs/Node20/package-lock.json b/Tasks/PythonScriptV0/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..9958ae2fb64e
--- /dev/null
+++ b/Tasks/PythonScriptV0/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,499 @@
+{
+ "name": "python-script",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.8.tgz",
+ "integrity": "sha512-eajsR9aeljqNhK028VG0Wuw+OaY5LLxYmxeoXynIoE6jannr9/Ucd1LL0hSSoafk5LTYG+FfqsyGt81Q6Zkybw=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/uuid": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/PythonScriptV0/_buildConfigs/Node20/package.json b/Tasks/PythonScriptV0/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..da0857717b9f
--- /dev/null
+++ b/Tasks/PythonScriptV0/_buildConfigs/Node20/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "python-script",
+ "version": "1.0.0",
+ "description": "Create and activate a Conda environment.",
+ "main": "pythonscript.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^5.2.7",
+ "@types/q": "^1.5.4",
+ "@types/uuid": "^8.3.0",
+ "azure-pipelines-task-lib": "^4.0.0-preview"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/PythonScriptV0/main.ts b/Tasks/PythonScriptV0/main.ts
index cf5ce980b7a3..18171c915e75 100644
--- a/Tasks/PythonScriptV0/main.ts
+++ b/Tasks/PythonScriptV0/main.ts
@@ -3,6 +3,9 @@ import * as task from 'azure-pipelines-task-lib/task';
import { pythonScript } from './pythonscript';
(async () => {
+#if NODE20
+ let error: any | undefined;
+#endif
try {
task.setResourcePath(path.join(__dirname, 'task.json'));
await pythonScript({
@@ -15,7 +18,12 @@ import { pythonScript } from './pythonscript';
failOnStderr: task.getBoolInput('failOnStderr')
});
task.setResult(task.TaskResult.Succeeded, "");
- } catch (error) {
+ } catch (e) {
+#if NODE20
+ error = e;
task.setResult(task.TaskResult.Failed, error.message);
+#else
+ task.setResult(task.TaskResult.Failed, e.message);
+#endif
}
})();
diff --git a/Tasks/PythonScriptV0/task.json b/Tasks/PythonScriptV0/task.json
index 2665bfba146f..bac31af77238 100644
--- a/Tasks/PythonScriptV0/task.json
+++ b/Tasks/PythonScriptV0/task.json
@@ -18,7 +18,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"demands": [],
"instanceNameFormat": "Run a Python script",
diff --git a/Tasks/PythonScriptV0/task.loc.json b/Tasks/PythonScriptV0/task.loc.json
index 2c160b98a304..1e0d92bc3da6 100644
--- a/Tasks/PythonScriptV0/task.loc.json
+++ b/Tasks/PythonScriptV0/task.loc.json
@@ -18,7 +18,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"demands": [],
"instanceNameFormat": "ms-resource:loc.instanceNameFormat",
diff --git a/Tasks/ShellScriptV2/_buildConfigs/Node20/package-lock.json b/Tasks/ShellScriptV2/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..a8906bae0fc6
--- /dev/null
+++ b/Tasks/ShellScriptV2/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,494 @@
+{
+ "name": "vsts-tasks-shellscript",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.8.tgz",
+ "integrity": "sha512-eajsR9aeljqNhK028VG0Wuw+OaY5LLxYmxeoXynIoE6jannr9/Ucd1LL0hSSoafk5LTYG+FfqsyGt81Q6Zkybw=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/uuid": {
+ "version": "8.3.4",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz",
+ "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/ShellScriptV2/_buildConfigs/Node20/package.json b/Tasks/ShellScriptV2/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..b75a6ce6de66
--- /dev/null
+++ b/Tasks/ShellScriptV2/_buildConfigs/Node20/package.json
@@ -0,0 +1,28 @@
+{
+ "name": "vsts-tasks-shellscript",
+ "version": "1.0.0",
+ "description": "Azure Pipelines ShellScript Task",
+ "main": "shellscript.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^5.2.7",
+ "@types/uuid": "^8.3.0",
+ "azure-pipelines-task-lib": "^4.0.0-preview"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/ShellScriptV2/task.json b/Tasks/ShellScriptV2/task.json
index 3701b07ee9be..45c10f53b8cf 100644
--- a/Tasks/ShellScriptV2/task.json
+++ b/Tasks/ShellScriptV2/task.json
@@ -18,7 +18,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"demands": [
"sh"
diff --git a/Tasks/ShellScriptV2/task.loc.json b/Tasks/ShellScriptV2/task.loc.json
index 0f54775914bb..c2d4ba39fc17 100644
--- a/Tasks/ShellScriptV2/task.loc.json
+++ b/Tasks/ShellScriptV2/task.loc.json
@@ -18,7 +18,7 @@
"version": {
"Major": 2,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"demands": [
"sh"
diff --git a/Tasks/SshV0/_buildConfigs/Node20/Tests/package-lock.json b/Tasks/SshV0/_buildConfigs/Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..3c3e0d26e773
--- /dev/null
+++ b/Tasks/SshV0/_buildConfigs/Node20/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "ssh-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/Tasks/SshV0/_buildConfigs/Node20/Tests/package.json b/Tasks/SshV0/_buildConfigs/Node20/Tests/package.json
new file mode 100644
index 000000000000..b74f00383e91
--- /dev/null
+++ b/Tasks/SshV0/_buildConfigs/Node20/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "ssh-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines SSH V0 Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.7"
+ }
+}
diff --git a/Tasks/SshV0/_buildConfigs/Node20/package-lock.json b/Tasks/SshV0/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..bcd241d764eb
--- /dev/null
+++ b/Tasks/SshV0/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,714 @@
+{
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.8.tgz",
+ "integrity": "sha512-eajsR9aeljqNhK028VG0Wuw+OaY5LLxYmxeoXynIoE6jannr9/Ucd1LL0hSSoafk5LTYG+FfqsyGt81Q6Zkybw=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@types/ssh2": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-1.11.6.tgz",
+ "integrity": "sha512-8Mf6bhzYYBLEB/G6COux7DS/F5bCWwojv/qFo2yH/e4cLzAavJnxvFXrYW59iKfXdhG6OmzJcXDasgOb/s0rxw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/ssh2-sftp-client": {
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/@types/ssh2-sftp-client/-/ssh2-sftp-client-5.3.2.tgz",
+ "integrity": "sha512-s5R3hsnI3/7Ar57LG++gm2kxgONHtOZY2A3AgGzEwiJlHR8j7MRPDw1n/hG6oMnOUJ4zuoLNtDXgDfmmxV4lDA==",
+ "requires": {
+ "@types/ssh2": "*"
+ }
+ },
+ "@types/uuid": {
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz",
+ "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-utility-common": {
+ "version": "3.225.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.225.1.tgz",
+ "integrity": "sha512-4wtVKuvx2PcQI0W8xkMdS/S+tf9Qu7wMJl4HSTLE1gjQ2x9o/6QbhMogz6O1+8ofxvTqmI4scA7GHKccDAwQpQ==",
+ "requires": {
+ "@types/node": "^16.11.39",
+ "azure-pipelines-task-lib": "^4.4.0",
+ "azure-pipelines-tool-lib": "^2.0.0-preview",
+ "js-yaml": "3.13.1",
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "16.18.47",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.47.tgz",
+ "integrity": "sha512-yBaT6qZKmvaeTuv8kfv2QwIsgi/D4bYSLmHow/IBxjLNRHxYEXgwVRvBmnNLBXi3CkZg0Wdzu3NTUlUjjxconQ=="
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz",
+ "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.1.0",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "buildcheck": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz",
+ "integrity": "sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==",
+ "optional": true
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "cpu-features": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz",
+ "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==",
+ "optional": true,
+ "requires": {
+ "buildcheck": "~0.0.6",
+ "nan": "^2.17.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "err-code": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA=="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "nan": {
+ "version": "2.17.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
+ "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+ "optional": true
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "promise-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
+ "requires": {
+ "err-code": "^2.0.2",
+ "retry": "^0.12.0"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "retry": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow=="
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "ssh2": {
+ "version": "1.14.0",
+ "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-1.14.0.tgz",
+ "integrity": "sha512-AqzD1UCqit8tbOKoj6ztDDi1ffJZ2rV2SwlgrVVrHPkV5vWqGJOVp5pmtj18PunkPJAuKQsnInyKV+/Nb2bUnA==",
+ "requires": {
+ "asn1": "^0.2.6",
+ "bcrypt-pbkdf": "^1.0.2",
+ "cpu-features": "~0.0.8",
+ "nan": "^2.17.0"
+ }
+ },
+ "ssh2-sftp-client": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/ssh2-sftp-client/-/ssh2-sftp-client-8.1.0.tgz",
+ "integrity": "sha512-00Ds+QcE7S6R6knE4cgKrvFxsOoAjSS16BSGRkv4n4RNYawyy3Iu9jlRz/nEXxpaVnojf0nn9zp0zATJssRrVw==",
+ "requires": {
+ "concat-stream": "^2.0.0",
+ "promise-retry": "^2.0.1",
+ "ssh2": "^1.10.0"
+ },
+ "dependencies": {
+ "concat-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz",
+ "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.0.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/SshV0/_buildConfigs/Node20/package.json b/Tasks/SshV0/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..cb13c5a0aa02
--- /dev/null
+++ b/Tasks/SshV0/_buildConfigs/Node20/package.json
@@ -0,0 +1,21 @@
+{
+ "scripts": {
+ "build": "node ../../make.js build --task SshV0",
+ "test": "node ../../make.js test --task SshV0"
+ },
+ "dependencies": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^20.3.1",
+ "@types/q": "^1.0.7",
+ "@types/ssh2": "1.11.6",
+ "@types/ssh2-sftp-client": "^5.2.0",
+ "azure-pipelines-task-lib": "^4.4.0",
+ "azure-pipelines-tasks-utility-common": "^3.225.1",
+ "ssh2": "^1.10.0",
+ "ssh2-sftp-client": "^8.1.0",
+ "uuid": "^3.2.1"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/SshV0/make.json b/Tasks/SshV0/make.json
index 8ff8f0c304e9..19b7726a8e54 100644
--- a/Tasks/SshV0/make.json
+++ b/Tasks/SshV0/make.json
@@ -3,8 +3,7 @@
{
"items": [
"node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/SshV0/task.json b/Tasks/SshV0/task.json
index 8d389203979f..34d21fe42356 100644
--- a/Tasks/SshV0/task.json
+++ b/Tasks/SshV0/task.json
@@ -18,7 +18,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 1
+ "Patch": 4
},
"demands": [],
"minimumAgentVersion": "2.144.0",
diff --git a/Tasks/SshV0/task.loc.json b/Tasks/SshV0/task.loc.json
index bbcf3930669a..6141a3775140 100644
--- a/Tasks/SshV0/task.loc.json
+++ b/Tasks/SshV0/task.loc.json
@@ -18,7 +18,7 @@
"version": {
"Major": 0,
"Minor": 229,
- "Patch": 1
+ "Patch": 4
},
"demands": [],
"minimumAgentVersion": "2.144.0",
diff --git a/Tasks/UseNodeV1/_buildConfigs/Node20/package-lock.json b/Tasks/UseNodeV1/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..7b026a7ddf82
--- /dev/null
+++ b/Tasks/UseNodeV1/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,589 @@
+{
+ "name": "usenode",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.8",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.8.tgz",
+ "integrity": "sha512-eajsR9aeljqNhK028VG0Wuw+OaY5LLxYmxeoXynIoE6jannr9/Ucd1LL0hSSoafk5LTYG+FfqsyGt81Q6Zkybw=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@types/uuid": {
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz",
+ "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-utility-common": {
+ "version": "3.225.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.225.1.tgz",
+ "integrity": "sha512-4wtVKuvx2PcQI0W8xkMdS/S+tf9Qu7wMJl4HSTLE1gjQ2x9o/6QbhMogz6O1+8ofxvTqmI4scA7GHKccDAwQpQ==",
+ "requires": {
+ "@types/node": "^16.11.39",
+ "azure-pipelines-task-lib": "^4.4.0",
+ "azure-pipelines-tool-lib": "^2.0.0-preview",
+ "js-yaml": "3.13.1",
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "16.18.47",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.47.tgz",
+ "integrity": "sha512-yBaT6qZKmvaeTuv8kfv2QwIsgi/D4bYSLmHow/IBxjLNRHxYEXgwVRvBmnNLBXi3CkZg0Wdzu3NTUlUjjxconQ=="
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz",
+ "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.1.0",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/UseNodeV1/_buildConfigs/Node20/package.json b/Tasks/UseNodeV1/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..618e2277814e
--- /dev/null
+++ b/Tasks/UseNodeV1/_buildConfigs/Node20/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "usenode",
+ "version": "1.0.0",
+ "description": "Use Node Eco-System",
+ "main": "usenode.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "keywords": [
+ "Azure",
+ "Pipelines",
+ "Tasks",
+ "Node"
+ ],
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^20.3.1",
+ "@types/q": "^1.5.1",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "azure-pipelines-tasks-utility-common": "^3.219.1",
+ "azure-pipelines-tool-lib": "^2.0.3",
+ "typed-rest-client": "^1.8.4"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/UseNodeV1/make.json b/Tasks/UseNodeV1/make.json
index 39bddfaad241..c58a8680a274 100644
--- a/Tasks/UseNodeV1/make.json
+++ b/Tasks/UseNodeV1/make.json
@@ -12,9 +12,7 @@
{
"items": [
"node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tool-lib/node_modules/mockery",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/UseNodeV1/task.json b/Tasks/UseNodeV1/task.json
index b155714c74f8..b62b01e6d61f 100644
--- a/Tasks/UseNodeV1/task.json
+++ b/Tasks/UseNodeV1/task.json
@@ -17,7 +17,7 @@
"version": {
"Major": 1,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"satisfies": [
"Node",
diff --git a/Tasks/UseNodeV1/task.loc.json b/Tasks/UseNodeV1/task.loc.json
index 8412a27d9173..ba5eeacf0816 100644
--- a/Tasks/UseNodeV1/task.loc.json
+++ b/Tasks/UseNodeV1/task.loc.json
@@ -17,7 +17,7 @@
"version": {
"Major": 1,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"satisfies": [
"Node",
diff --git a/Tasks/XcodeV5/Tests/L0NoXcpretty.ts b/Tasks/XcodeV5/Tests/L0NoXcpretty.ts
index 7203954c2e6d..86c0b8e421a8 100644
--- a/Tasks/XcodeV5/Tests/L0NoXcpretty.ts
+++ b/Tasks/XcodeV5/Tests/L0NoXcpretty.ts
@@ -2,7 +2,6 @@
import ma = require('azure-pipelines-task-lib/mock-answer');
import tmrm = require('azure-pipelines-task-lib/mock-run');
import path = require('path');
-import { emit } from 'cluster';
import { emitTelemetry } from '../xcodeutils';
let taskPath = path.join(__dirname, '..', 'xcode.js');
diff --git a/Tasks/XcodeV5/_buildConfigs/Node20/Tests/package-lock.json b/Tasks/XcodeV5/_buildConfigs/Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..8019855cbcc2
--- /dev/null
+++ b/Tasks/XcodeV5/_buildConfigs/Node20/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "vsts-tasks-xcode-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz",
+ "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==",
+ "dev": true
+ }
+ }
+}
diff --git a/Tasks/XcodeV5/_buildConfigs/Node20/Tests/package.json b/Tasks/XcodeV5/_buildConfigs/Node20/Tests/package.json
new file mode 100644
index 000000000000..ad95fd92c3a3
--- /dev/null
+++ b/Tasks/XcodeV5/_buildConfigs/Node20/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "vsts-tasks-xcode-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Xcode Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.0"
+ }
+}
diff --git a/Tasks/XcodeV5/_buildConfigs/Node20/package-lock.json b/Tasks/XcodeV5/_buildConfigs/Node20/package-lock.json
new file mode 100644
index 000000000000..8a3bab64bb0e
--- /dev/null
+++ b/Tasks/XcodeV5/_buildConfigs/Node20/package-lock.json
@@ -0,0 +1,654 @@
+{
+ "name": "vsts-tasks-xcode",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.8.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz",
+ "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w=="
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@types/uuid": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz",
+ "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.0.0-preview",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.0.0-preview.tgz",
+ "integrity": "sha512-BK+VOo42Bec72Wic6Vsm2MaAJezNyF05OYAQS5FuZJM5Z972lZqYpujtSc4BFKUhC3HO+F/Yf4xhAV2tZCzN9Q==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-ios-signing-common": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-ios-signing-common/-/azure-pipelines-tasks-ios-signing-common-2.0.4.tgz",
+ "integrity": "sha512-7mRpucLf5wBYceINW7Nx6Yr8+rKUSED398j5iTZyZsqQ0VIOaOMeQEg1icAvhsrSHxrBEgLwdliio6DHFGz/BA==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-utility-common": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.0.3.tgz",
+ "integrity": "sha512-kG2RWtfYf3t+y0I+yJACRLOB1rJYjUf2dLlxwXqgOrAU1g2amVNTLbEcL/VSqqrFQq2UwvBoVVppDbwPyfhm9Q==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "azure-pipelines-task-lib": "^3.1.0",
+ "azure-pipelines-tool-lib": "^1.0.2",
+ "js-yaml": "3.13.1",
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "@types/uuid": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz",
+ "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.3.2.tgz",
+ "integrity": "sha512-PtYcd3E2ouwZhLuaOpWA00FYoLjRuJs1V8mNu3u6lBnqeYd4jh/8VL/of6nchm8f2NM6Div+EEnbOcmWvcptPg==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^3.1.10",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.0-preview",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.0-preview.tgz",
+ "integrity": "sha512-OeivwKLpLMsvGpZ2H+2UPxFwwqNkV8TzfKByqjYAllzGDAw4BvciAdjCMwkpGdTOnzfPbRpr33sy48kn7RqfKA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "@types/uuid": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz",
+ "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A=="
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz",
+ "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz",
+ "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz",
+ "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
+ "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/Tasks/XcodeV5/_buildConfigs/Node20/package.json b/Tasks/XcodeV5/_buildConfigs/Node20/package.json
new file mode 100644
index 000000000000..d5261a273419
--- /dev/null
+++ b/Tasks/XcodeV5/_buildConfigs/Node20/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "vsts-tasks-xcode",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Xcode Task",
+ "main": "xcode.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^5.2.7",
+ "@types/uuid": "^8.3.0",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "azure-pipelines-tool-lib": "^2.0.0-preview",
+ "azure-pipelines-tasks-ios-signing-common": "2.0.4",
+ "azure-pipelines-tasks-utility-common": "^3.0.3"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/Tasks/XcodeV5/make.json b/Tasks/XcodeV5/make.json
index 5e43731618d1..7e5057afbbed 100644
--- a/Tasks/XcodeV5/make.json
+++ b/Tasks/XcodeV5/make.json
@@ -5,9 +5,7 @@
"node_modules/azure-pipelines-tasks-ios-signing-common/node_modules/azure-pipelines-task-lib",
"node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib",
"node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-tool-lib",
- "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib",
- "node_modules/azure-pipelines-tool-lib/node_modules/mockery",
- "node_modules/mockery"
+ "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib"
],
"options": "-Rf"
}
diff --git a/Tasks/XcodeV5/task.json b/Tasks/XcodeV5/task.json
index 51d02bea56f2..7a8434775f65 100644
--- a/Tasks/XcodeV5/task.json
+++ b/Tasks/XcodeV5/task.json
@@ -13,7 +13,7 @@
"version": {
"Major": 5,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"releaseNotes": "This version of the task is compatible with Xcode 8 - 13. Features that were solely to maintain compatibility with Xcode 7 have been removed. This task has better options for using Microsoft-hosted macOS agents.",
"demands": [
diff --git a/Tasks/XcodeV5/task.loc.json b/Tasks/XcodeV5/task.loc.json
index e99b46c57a1d..dab4f5dd2eae 100644
--- a/Tasks/XcodeV5/task.loc.json
+++ b/Tasks/XcodeV5/task.loc.json
@@ -13,7 +13,7 @@
"version": {
"Major": 5,
"Minor": 229,
- "Patch": 0
+ "Patch": 3
},
"releaseNotes": "ms-resource:loc.releaseNotes",
"demands": [
diff --git a/_generated/FtpUploadV2.versionmap.txt b/_generated/FtpUploadV2.versionmap.txt
new file mode 100644
index 000000000000..4a312fb3b52c
--- /dev/null
+++ b/_generated/FtpUploadV2.versionmap.txt
@@ -0,0 +1,2 @@
+Default|2.229.3
+Node20-225|2.229.4
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/de-DE/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..baeff4c43182
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP-Upload",
+ "loc.helpMarkDown": "Lädt Dateien auf einen Remotecomputer mithilfe von FTP (File Transfer Protocol) oder sicher mit FTPS hoch. [Weitere Informationen](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Hiermit werden Dateien per FTP hochgeladen.",
+ "loc.instanceNameFormat": "FTP-Upload: $(rootFolder)",
+ "loc.group.displayName.advanced": "Erweitert",
+ "loc.input.label.credsType": "Authentifizierungsmethode",
+ "loc.input.help.credsType": "Verwenden Sie die FTP-Dienstverbindung, oder geben Sie Anmeldeinformationen ein.",
+ "loc.input.label.serverEndpoint": "FTP-Dienstverbindung",
+ "loc.input.help.serverEndpoint": "Wählen Sie die Dienstverbindung für Ihren FTP-Server aus. Klicken Sie zum Erstellen einer Dienstverbindung auf den Link \"Verwalten\", und erstellen Sie dann eine neue generische Dienstverbindung. Geben Sie die FTP-Server-URL für die Server-URL (z. B. \"ftp://server.example.com\" ) sowie die erforderlichen Anmeldeinformationen ein.
Sichere Verbindungen werden unabhängig vom angegebenen Protokoll (\"ftp://\" oder \"ftps://\" ) immer hergestellt, wenn der Zielserver FTPS unterstützt. Um nur sichere Verbindungen zuzulassen, verwenden Sie das Protokoll \"ftps://\" (z. B. \"ftps://server.example.com\" ). Bei Verbindungen mit Servern ohne FTPS-Unterstützung kommt es zu einem Fehler, wenn \"ftps://\" angegeben wird.",
+ "loc.input.label.serverUrl": "Server-URL",
+ "loc.input.label.username": "Benutzername",
+ "loc.input.label.password": "Kennwort",
+ "loc.input.label.rootFolder": "Stammordner",
+ "loc.input.help.rootFolder": "Der Quellordner, aus dem Dateien hochgeladen werden sollen.",
+ "loc.input.label.filePatterns": "Dateimuster",
+ "loc.input.help.filePatterns": "Dateipfade oder Muster der hochzuladenden Dateien. Unterstützt mehrere Minimatchmuster. [Weitere Informationen](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Remoteverzeichnis",
+ "loc.input.help.remotePath": "Lädt Dateien in dieses Verzeichnis auf dem Remote-FTP-Server hoch.",
+ "loc.input.label.enableUtf8": "UTF-8-Unterstützung aktivieren",
+ "loc.input.help.enableUtf8": "Aktiviert die UTF-8-Unterstützung für die FTP-Verbindung (\"OPTS UTF8 ON\").",
+ "loc.input.label.clean": "Remoteverzeichnis löschen",
+ "loc.input.help.clean": "Löscht das Remoteverzeichnis einschließlich seiner Inhalte vor dem Hochladen.",
+ "loc.input.label.cleanContents": "Inhalte des Remoteverzeichnisses löschen",
+ "loc.input.help.cleanContents": "Löscht vor dem Hochladen rekursiv alle Inhalte aus dem Remoteverzeichnis. Das vorhandene Verzeichnis wird nicht gelöscht. Erwägen Sie zur Leistungsverbesserung stattdessen die Verwendung von \"Remoteverzeichnis löschen\".",
+ "loc.input.label.preservePaths": "Dateipfade beibehalten",
+ "loc.input.help.preservePaths": "Wenn diese Option ausgewählt wird, wird die relative lokale Verzeichnisstruktur unter dem Remoteverzeichnis erneut erstellt, in das Dateien hochgeladen werden. Andernfalls werden Dateien direkt in das Remoteverzeichnis hochgeladen, ohne dass zusätzliche Unterverzeichnisse erstellt werden.
Angenommen, der Quellordner ist \"/home/user/source/\" , und er enthält die Datei \"foo/bar/foobar.txt\" . Das Remoteverzeichnis ist \"/uploads/\" . Wenn diese Option ausgewählt wird, wird die Datei in \"/uploads/foo/bar/foobar.txt\" hochgeladen. Andernfalls wird sie in \"/uploads/foobar.txt\" hochgeladen.",
+ "loc.input.label.trustSSL": "Serverzertifikat vertrauen",
+ "loc.input.help.trustSSL": "Das Auswählen dieser Option führt dazu, dass das SSL-Zertifikat des FTP-Servers mit ftps:// selbst dann als vertrauenswürdig betrachtet wird, wenn es selbstsigniert ist oder nicht von einer Zertifizierungsstelle (CA) überprüft werden kann.",
+ "loc.input.label.customCmds": "FTP-Befehle",
+ "loc.input.help.customCmds": "Optionale FTP-Befehle, die bei der Verbindungsherstellung an den FTP-Remoteserver gesendet werden.",
+ "loc.messages.CleanRemoteDir": "Remoteverzeichnis wird entfernt: %s",
+ "loc.messages.CleanRemoteDirContents": "Remoteverzeichnisinhalte werden entfernt: %s",
+ "loc.messages.CleanFileDeleteFail": "Fehler beim Versuch, die Datei zu entfernen: %s",
+ "loc.messages.ConnectPort": "Verbindung wird hergestellt mit: %s:%s ",
+ "loc.messages.Disconnected": "Getrennt",
+ "loc.messages.DisconnectHost": "Verbindung wird getrennt: %s",
+ "loc.messages.FTPConnected": "Verbunden: %s",
+ "loc.messages.InvalidFTPOptions": "Fehler beim Lesen der FTP-Optionen: %s",
+ "loc.messages.FTPNoHostSpecified": "Die URL des FTP-Servers muss einen Hostnamen enthalten.",
+ "loc.messages.FTPNoProtocolSpecified": "Die URL des FTP-Servers muss mit ftp:// oder ftps:// beginnen.",
+ "loc.messages.NoFilesFound": "Es wurden keine Dateien zum Upload gefunden.",
+ "loc.messages.UploadRemoteDir": "Die Dateien werden in das Remoteverzeichnis hochgeladen: %s",
+ "loc.messages.UploadSucceedMsg": "FTP-Upload erfolgreich: %s",
+ "loc.messages.UploadSucceedRes": "FTP-Upload erfolgreich",
+ "loc.messages.UploadFailed": "Fehler bei FTP-Upload."
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/en-US/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..0a96625d162a
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,48 @@
+{
+ "loc.friendlyName": "FTP upload",
+ "loc.helpMarkDown": "Upload files to a remote machine using the File Transfer Protocol (FTP), or securely with FTPS. [More Information](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Upload files using FTP",
+ "loc.instanceNameFormat": "FTP Upload: $(rootFolder)",
+ "loc.group.displayName.advanced": "Advanced",
+ "loc.input.label.credsType": "Authentication Method",
+ "loc.input.help.credsType": "Use FTP service connection or enter connection credentials.",
+ "loc.input.label.serverEndpoint": "FTP Service Connection",
+ "loc.input.help.serverEndpoint": "Select the service connection for your FTP server. To create one, click the Manage link and create a new Generic service connection, enter the FTP server URL for the server URL, e.g. `ftp://server.example.com` , and required credentials.
Secure connections will always be made regardless of the specified protocol (`ftp://` or `ftps://` ) if the target server supports FTPS. To allow only secure connections, use the `ftps://` protocol, e.g. `ftps://server.example.com` . Connections to servers not supporting FTPS will fail if `ftps://` is specified.",
+ "loc.input.label.serverUrl": "Server URL",
+ "loc.input.label.username": "Username",
+ "loc.input.label.password": "Password",
+ "loc.input.label.implicitFTPS": "Use implicit FTPS",
+ "loc.input.label.rootFolder": "Root folder",
+ "loc.input.help.rootFolder": "The source folder to upload files from.",
+ "loc.input.label.filePatterns": "File patterns",
+ "loc.input.help.filePatterns": "File paths or patterns of the files to upload. Supports multiple lines of minimatch patterns. [More Information](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Remote directory",
+ "loc.input.help.remotePath": "Upload files to this directory on the remote FTP server.",
+ "loc.input.label.enableUtf8": "Enable UTF8 support",
+ "loc.input.help.enableUtf8": "Enables UTF-8 support for the FTP connection ('OPTS UTF8 ON').",
+ "loc.input.label.clean": "Delete remote directory",
+ "loc.input.help.clean": "Delete the remote directory including its contents before uploading.",
+ "loc.input.label.cleanContents": "Clear remote directory contents",
+ "loc.input.help.cleanContents": "Recursively delete all contents of the remote directory before uploading. The existing directory will not be deleted. For better performance, consider using `Delete remote directory` instead.",
+ "loc.input.label.preservePaths": "Preserve file paths",
+ "loc.input.help.preservePaths": "If selected, the relative local directory structure is recreated under the remote directory where files are uploaded. Otherwise, files are uploaded directly to the remote directory without creating additional subdirectories.
For example, suppose your source folder is: `/home/user/source/` and contains the file: `foo/bar/foobar.txt` , and your remote directory is: `/uploads/` . If selected, the file is uploaded to: `/uploads/foo/bar/foobar.txt` . Otherwise, to: `/uploads/foobar.txt` .",
+ "loc.input.label.trustSSL": "Trust server certificate",
+ "loc.input.help.trustSSL": "Selecting this option results in the FTP server's SSL certificate being trusted with ftps://, even if it is self-signed or cannot be validated by a Certificate Authority (CA).",
+ "loc.input.label.customCmds": "FTP Commands",
+ "loc.input.help.customCmds": "Optional FTP Commands that will be sent to the remote FTP server upon connection.",
+ "loc.messages.CleanRemoteDir": "removing remote directory: %s",
+ "loc.messages.CleanRemoteDirContents": "removing remote directory contents: %s",
+ "loc.messages.CleanFileDeleteFail": "an error occurred while trying to remove file: %s",
+ "loc.messages.ConnectPort": "connecting to: %s:%s",
+ "loc.messages.Disconnected": "disconnected",
+ "loc.messages.DisconnectHost": "disconnecting from: %s",
+ "loc.messages.FTPConnected": "connected: %s",
+ "loc.messages.InvalidFTPOptions": "There was an error when reading FTP options: %s",
+ "loc.messages.FTPNoHostSpecified": "The FTP server URL must include a host name",
+ "loc.messages.FTPNoProtocolSpecified": "The FTP server URL must begin with ftp:// or ftps://",
+ "loc.messages.NoFilesFound": "Could not find any files to upload",
+ "loc.messages.UploadRemoteDir": "uploading files to remote directory: %s",
+ "loc.messages.UploadSucceedMsg": "FTP upload successful %s",
+ "loc.messages.UploadSucceedRes": "FTP upload successful",
+ "loc.messages.UploadFailed": "Ftp Upload failed"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/es-ES/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..767dc0406b72
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "Carga por FTP",
+ "loc.helpMarkDown": "Carga los archivos en una máquina remota usando el protocolo de transferencia de archivos (FTP) o de forma segura con FTPS. [Más información](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Cargar archivos con FTP",
+ "loc.instanceNameFormat": "Carga por FTP: $(rootFolder)",
+ "loc.group.displayName.advanced": "Avanzado",
+ "loc.input.label.credsType": "Método de autenticación",
+ "loc.input.help.credsType": "Use la conexión del servicio FTP o especifique credenciales para la conexión.",
+ "loc.input.label.serverEndpoint": "Conexión del servicio FTP",
+ "loc.input.help.serverEndpoint": "Seleccione el punto de conexión de servicio del servidor FTP. Para crear uno, haga clic en el vínculo Administrar y cree un nuevo punto de conexión de servicio genérico, escriba la dirección URL del servidor FTP (por ejemplo, \"ftp://servidor.ejemplo.com\" ) y las credenciales necesarias.
Siempre se usarán conexiones seguras, independientemente del protocolo especificado (\"ftp://\" o \"ftps://\" ) si el servidor de destino admite FTPS. Para permitir solo conexiones seguras, use el protocolo \"ftps://\" (por ejemplo, \"ftps://servidor.ejemplo.com\" ). Las conexiones a los servidores que no admiten FTPS dan error si se especifica \"ftps://\" .",
+ "loc.input.label.serverUrl": "Dirección URL del servidor",
+ "loc.input.label.username": "Nombre de usuario",
+ "loc.input.label.password": "Contraseña",
+ "loc.input.label.rootFolder": "Carpeta raíz",
+ "loc.input.help.rootFolder": "Carpeta de origen de donde se cargan los archivos.",
+ "loc.input.label.filePatterns": "Patrones de archivo",
+ "loc.input.help.filePatterns": "Rutas de acceso de archivo o patrones de los archivos que se deben cargar. Admite varias líneas de patrones de minimatch. [Más información](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Directorio remoto",
+ "loc.input.help.remotePath": "Carga los archivos en este directorio en el servidor FTP remoto.",
+ "loc.input.label.enableUtf8": "Habilitar la compatibilidad con UTF8",
+ "loc.input.help.enableUtf8": "Habilita la compatibilidad con UTF-8 para la conexión FTP (\"OPTS UTF8 ON\").",
+ "loc.input.label.clean": "Eliminar el directorio remoto",
+ "loc.input.help.clean": "Elimine el directorio remoto, incluido su contenido, antes de cargar.",
+ "loc.input.label.cleanContents": "Borrar el contenido del directorio remoto",
+ "loc.input.help.cleanContents": "Elimine de forma recursiva todo el contenido del directorio remoto antes de cargar. El directorio existente no se elimina. Para mejorar el rendimiento, considere la posibilidad de usar \"Eliminar el directorio remoto\" en su lugar.",
+ "loc.input.label.preservePaths": "Mantener las rutas de acceso de los archivos",
+ "loc.input.help.preservePaths": "Cuando se selecciona, la estructura de directorios local relativa se vuelve a crear en el directorio remoto donde se cargan los archivos. De lo contrario, los archivos se cargan directamente en el directorio remoto sin crear subdirectorios adicionales.
Por ejemplo, image que su carpeta es `/home/user/source/` y contiene el archivo `foo/bar/foobar.txt` , y el directorio remoto es `/uploads/` . Si selecciona esta opción, el archivo se carga en `/uploads/foo/bar/foobar.txt` . De lo contrario, se carga en `/uploads/foobar.txt` .",
+ "loc.input.label.trustSSL": "Confiar en el certificado del servidor",
+ "loc.input.help.trustSSL": "Cuando se selecciona esta opción, se confía en el certificado SSL del servidor FTP con ftps://, incluso si es autofirmado o no lo puede validar una entidad de certificación (CA).",
+ "loc.input.label.customCmds": "Comandos FTP",
+ "loc.input.help.customCmds": "Comandos FTP opcionales que se enviarán al servidor FTP remoto al conectarse.",
+ "loc.messages.CleanRemoteDir": "Quitando el directorio remoto: %s",
+ "loc.messages.CleanRemoteDirContents": "Quitando el contenido del directorio remoto: %s",
+ "loc.messages.CleanFileDeleteFail": "Error al intentar quitar el archivo: %s",
+ "loc.messages.ConnectPort": "conectándose a: %s:%s",
+ "loc.messages.Disconnected": "desconectado",
+ "loc.messages.DisconnectHost": "desconectándose de: %s",
+ "loc.messages.FTPConnected": "conectado: %s",
+ "loc.messages.InvalidFTPOptions": "Se ha producido un error al leer las opciones de FTP: %s",
+ "loc.messages.FTPNoHostSpecified": "La dirección URL del servidor FTP debe incluir un nombre de host",
+ "loc.messages.FTPNoProtocolSpecified": "La dirección URL del servidor FTP debe comenzar con ftp:// o ftps://",
+ "loc.messages.NoFilesFound": "No se encontró ningún archivo para cargar.",
+ "loc.messages.UploadRemoteDir": "cargando archivos al directorio remoto: %s",
+ "loc.messages.UploadSucceedMsg": "La carga por FTP de %s se realizó correctamente",
+ "loc.messages.UploadSucceedRes": "Carga por FTP correcta",
+ "loc.messages.UploadFailed": "Error en la carga por FTP"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..1bb46724c141
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "Chargement FTP",
+ "loc.helpMarkDown": "Chargez les fichiers vers une machine distante par FTP (File Transfer Protocol), ou de manière sécurisée par FTPS. [Plus d'informations](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Charger des fichiers via FTP",
+ "loc.instanceNameFormat": "Chargement FTP : $(rootFolder)",
+ "loc.group.displayName.advanced": "Avancé",
+ "loc.input.label.credsType": "Méthode d'authentification",
+ "loc.input.help.credsType": "Utilisez la connexion de service FTP, ou entrez les informations d'identification de connexion.",
+ "loc.input.label.serverEndpoint": "Connexion de service FTP",
+ "loc.input.help.serverEndpoint": "Sélectionnez la connexion de service de votre serveur FTP. Pour en créer une, cliquez sur le lien Gérer, puis créez une connexion de service générique, entrez l'URL du serveur FTP, par exemple 'ftp://server.example.com' , ainsi que les informations d'identification nécessaires.
Quel que soit le protocole spécifié, ('ftp://' ou 'ftps://' ), la sécurisation des connexions est assurée si le serveur cible prend en charge le protocole FTPS. Pour autoriser uniquement les connexions sécurisées, utilisez le protocole 'ftps://' , par exemple 'ftps://server.example.com' . Si 'ftps://' est spécifié, les connexions aux serveurs qui ne prennent pas en charge FTPS ne sont pas établies.",
+ "loc.input.label.serverUrl": "URL du serveur",
+ "loc.input.label.username": "Nom d'utilisateur",
+ "loc.input.label.password": "Mot de passe",
+ "loc.input.label.rootFolder": "Dossier racine",
+ "loc.input.help.rootFolder": "Dossier source du chargement des fichiers.",
+ "loc.input.label.filePatterns": "Modèles de fichiers",
+ "loc.input.help.filePatterns": "Chemins de fichiers ou modèles des fichiers à charger. Prend en charge plusieurs lignes de modèles minimatch. [Plus d'informations](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Répertoire distant",
+ "loc.input.help.remotePath": "Chargez les fichiers vers ce répertoire sur le serveur FTP distant.",
+ "loc.input.label.enableUtf8": "Activer la prise en charge d'UTF8",
+ "loc.input.help.enableUtf8": "Active la prise en charge d'UTF-8 pour la connexion FTP ('OPTS UTF8 ON').",
+ "loc.input.label.clean": "Supprimer le répertoire distant",
+ "loc.input.help.clean": "Supprimez le répertoire distant, notamment son contenu, avant le chargement.",
+ "loc.input.label.cleanContents": "Effacer le contenu du répertoire distant",
+ "loc.input.help.cleanContents": "Supprimez de manière récursive la totalité du contenu du répertoire distant avant le chargement. Le répertoire existant ne sera pas supprimé. Pour un meilleur niveau de performance, pensez à utiliser 'Supprimer le répertoire distant' à la place.",
+ "loc.input.label.preservePaths": "Conserver les chemins de fichiers",
+ "loc.input.help.preservePaths": "Si l'option est sélectionnée, la structure de répertoire locale relative est recréée sous le répertoire distant où les fichiers sont chargés. Sinon, les fichiers sont chargés directement sur le répertoire distant sans création de sous-répertoires supplémentaires.
Par exemple, votre dossier source est '/home/user/source/' , il contient le fichier 'foo/bar/foobar.txt' , et votre répertoire distant est '/uploads/' . Si l'option est sélectionnée, le fichier est chargé vers '/uploads/foo/bar/foobar.txt' . Sinon, il est chargé vers '/uploads/foobar.txt' .",
+ "loc.input.label.trustSSL": "Faire confiance au certificat de serveur",
+ "loc.input.help.trustSSL": "Si cette option est sélectionnée, le certificat SSL du serveur FTP est approuvé avec ftps://, même s'il est auto-signé ou même s'il ne peut pas être validé par une autorité de certification.",
+ "loc.input.label.customCmds": "Commandes FTP",
+ "loc.input.help.customCmds": "Commandes FTP facultatives qui sont envoyées au serveur FTP distant au moment de la connexion.",
+ "loc.messages.CleanRemoteDir": "suppression du répertoire distant : %s",
+ "loc.messages.CleanRemoteDirContents": "suppression du contenu du répertoire distant : %s",
+ "loc.messages.CleanFileDeleteFail": "une erreur s'est produite durant la suppression du fichier : %s",
+ "loc.messages.ConnectPort": "Connexion à : %s:%s",
+ "loc.messages.Disconnected": "déconnecté",
+ "loc.messages.DisconnectHost": "déconnexion de %s",
+ "loc.messages.FTPConnected": "connecté : %s",
+ "loc.messages.InvalidFTPOptions": "Une erreur s’est produite lors de la lecture des options de ftP : %s",
+ "loc.messages.FTPNoHostSpecified": "L'URL du serveur FTP doit inclure un nom d'hôte",
+ "loc.messages.FTPNoProtocolSpecified": "L'URL du serveur FTP doit commencer par ftp:// ou ftps://",
+ "loc.messages.NoFilesFound": "Fichiers à charger introuvables",
+ "loc.messages.UploadRemoteDir": "téléchargement de fichiers sur le répertoire distant : %s",
+ "loc.messages.UploadSucceedMsg": "Téléchargement FTP réussi %s",
+ "loc.messages.UploadSucceedRes": "Téléchargement FTP réussi",
+ "loc.messages.UploadFailed": "Échec du chargement FTP"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/it-IT/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..592dda67f48a
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "Caricamento FTP",
+ "loc.helpMarkDown": "Carica i file in un computer remoto usando il protocollo FTP (File Transfer Protocol) oppure in modo protetto con FTPS. [Altre informazioni](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Consente di caricare file tramite FTP",
+ "loc.instanceNameFormat": "Caricamento FTP: $(rootFolder)",
+ "loc.group.displayName.advanced": "Avanzate",
+ "loc.input.label.credsType": "Metodo di autenticazione",
+ "loc.input.help.credsType": "Consente di usare la connessione al servizio FTP o di immettere le credenziali di connessione.",
+ "loc.input.label.serverEndpoint": "Connessione al servizio FTP",
+ "loc.input.help.serverEndpoint": "Consente di selezionare la connessione al servizio per il server FTP. Per crearne una, fare clic sul collegamento Gestisci e creare una nuova connessione al servizio generica, immettere l'URL del server FTP per l'URL del server, ad esempio `ftp://server.example.com` , nonché le credenziali richieste.
Le connessioni sicure verranno sempre stabilite indipendentemente dal protocollo specificato (`ftp://` o `ftps://` ) se il server di destinazione supporta FTPS. Per consentire solo le connessioni sicure, usare il protocollo `ftps://` , ad esempio `ftps://server.example.com` . Se si specifica `ftps://` , le connessioni a server che non supportano FTPS non riusciranno.",
+ "loc.input.label.serverUrl": "URL del server",
+ "loc.input.label.username": "Nome utente",
+ "loc.input.label.password": "Password",
+ "loc.input.label.rootFolder": "Cartella radice",
+ "loc.input.help.rootFolder": "Cartella di origine da cui caricare i file.",
+ "loc.input.label.filePatterns": "Criteri dei file",
+ "loc.input.help.filePatterns": "Criteri o percorsi dei file da caricare. Sono supportate più righe di criteri di corrispondenza minima. [Altre informazioni](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Directory remota",
+ "loc.input.help.remotePath": "Directory in cui vengono caricati i file nel server FTP remoto.",
+ "loc.input.label.enableUtf8": "Abilita supporto di UTF8",
+ "loc.input.help.enableUtf8": "Abilita il supporto di UTF-8 per la connessione FTP ('OPTS UTF8 ON').",
+ "loc.input.label.clean": "Elimina la directory remota",
+ "loc.input.help.clean": "Elimina la directory remota, incluso il relativo contenuto, prima del caricamento.",
+ "loc.input.label.cleanContents": "Cancella il contenuto della directory remota",
+ "loc.input.help.cleanContents": "Elimina in modo ricorsivo tutto il contenuto della directory remota prima del caricamento. La directory esistente non verrà eliminata. Per prestazioni ottimali, provare a usare `Elimina la directory remota`.",
+ "loc.input.label.preservePaths": "Mantieni i percorsi di file",
+ "loc.input.help.preservePaths": "Se l'opzione è selezionata, la struttura di directory locale relativa viene ricreata nella directory remota in cui vengono caricati i file. In caso contrario, i file vengono caricati direttamente nella directory remota senza creare sottodirectory aggiuntive.
Ad esempio, si supponga che la cartella di origine sia `/home/user/source/` e contenga il file `foo/bar/foobar.txt` e che la directory remota sia `/uploads/` . Se l'opzione è selezionata, il file verrà caricato in `/uploads/foo/bar/foobar.txt` ; in caso contrario, verrà caricato in `/uploads/foobar.txt` .",
+ "loc.input.label.trustSSL": "Considera attendibile il certificato del server",
+ "loc.input.help.trustSSL": "Se si seleziona questa opzione, il certificato SSL del server FTP verrà considerato attendibile con ftps://, anche se è auto-firmato o non può essere convalidato da un'Autorità di certificazione (CA).",
+ "loc.input.label.customCmds": "Comandi FTP",
+ "loc.input.help.customCmds": "Comandi FTP facoltativi che verranno inviati al server FTP remoto durante la connessione.",
+ "loc.messages.CleanRemoteDir": "rimozione della directory remota: %s",
+ "loc.messages.CleanRemoteDirContents": "rimozione del contenuto della directory remota: %s",
+ "loc.messages.CleanFileDeleteFail": "si è verificato un errore durante il tentativo di rimuovere il file: %s",
+ "loc.messages.ConnectPort": "connessione a: %s:%s",
+ "loc.messages.Disconnected": "disconnesso",
+ "loc.messages.DisconnectHost": "disconnessione da: %s",
+ "loc.messages.FTPConnected": "connessione stabilita: %s",
+ "loc.messages.InvalidFTPOptions": "Si è verificato un errore durante la lettura delle opzioni FTP: %s",
+ "loc.messages.FTPNoHostSpecified": "L'URL del server FTP deve includere un nome host",
+ "loc.messages.FTPNoProtocolSpecified": "L'URL del server FTP deve iniziare con ftp:// o ftps://",
+ "loc.messages.NoFilesFound": "Non è stato possibile trovare file da caricare",
+ "loc.messages.UploadRemoteDir": "caricamento di file nella directory remota: %s",
+ "loc.messages.UploadSucceedMsg": "Caricamento FTP riuscito: %s",
+ "loc.messages.UploadSucceedRes": "Caricamento FTP riuscito",
+ "loc.messages.UploadFailed": "Caricamento tramite FTP non riuscito"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..5895d2238495
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP アップロード",
+ "loc.helpMarkDown": "ファイル転送プロトコル (FTP) を使用して、または FTPS でセキュリティ保護して、リモート コンピューターにファイルをアップロードします。[詳細情報](http://go.microsoft.com/fwlink/?LinkId=809084)。",
+ "loc.description": "FTP を使用してファイルをアップロードします",
+ "loc.instanceNameFormat": "FTP アップロード: $(rootFolder)",
+ "loc.group.displayName.advanced": "詳細設定",
+ "loc.input.label.credsType": "認証方法",
+ "loc.input.help.credsType": "FTP サービス接続を使うか、接続の資格情報を入力します。",
+ "loc.input.label.serverEndpoint": "FTP サービス接続",
+ "loc.input.help.serverEndpoint": "FTP サーバーのサービス エンドポイントを選択します。サービス エンドポイントを作成するには、[管理] リンクをクリックし、新しい汎用サービス エンドポイントを作成し、サーバー URL の FTP サーバー URL (例: `ftp://server.example.com` ) と必要な資格情報を入力します。
ターゲット サーバーが FTPS をサポートしている場合には、指定したプロトコル (`ftp://` または `ftps://` ) に関係なくセキュリティで保護された接続が常に作成されます。セキュリティで保護された接続のみを許可する場合には `ftps://` プロトコル (例: `ftps://server.example.com` ) を使用します。`ftps://` を指定すると、FTPS をサポートしていないサーバーへの接続は失敗します。",
+ "loc.input.label.serverUrl": "サーバーの URL",
+ "loc.input.label.username": "ユーザー名",
+ "loc.input.label.password": "パスワード",
+ "loc.input.label.rootFolder": "ルート フォルダー",
+ "loc.input.help.rootFolder": "ファイルのアップロード元のソース フォルダー。",
+ "loc.input.label.filePatterns": "ファイル パターン",
+ "loc.input.help.filePatterns": "アーカイブするファイルのファイル パスまたはパターン。複数行の minimatch パターンをサポートします。[詳細情報](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "リモート ディレクトリ",
+ "loc.input.help.remotePath": "リモート FTP サーバー上のこのディレクトリにファイルをアップロードします。",
+ "loc.input.label.enableUtf8": "UTF-8 サポートを有効にする",
+ "loc.input.help.enableUtf8": "FTP 接続の UTF-8 サポートを有効にします ('OPTS UTF8 ON')。",
+ "loc.input.label.clean": "リモート ディレクトリの削除",
+ "loc.input.help.clean": "アップロードする前に、リモート ディレクトリをコンテンツも含めて削除します。",
+ "loc.input.label.cleanContents": "リモート ディレクトリ コンテンツのクリア",
+ "loc.input.help.cleanContents": "アップロードの前に、リモート ディレクトリのすべてのコンテンツを再帰的に削除します。既存のディレクトリは、削除されません。パフォーマンス向上のために、代わりに [リモート ディレクトリの削除] の使用をご検討ください。",
+ "loc.input.label.preservePaths": "ファイル パスを保持",
+ "loc.input.help.preservePaths": "選択すると、ファイルのアップロード先のリモート ディレクトリの下に、相対ローカル ディレクトリ構造が再作成されます。選択しない場合には、ファイルは、サブディレクトリが作成されることなくリモート ディレクトリに直接アップロードされます。
たとえば、ソース フォルダーが `/home/user/source/` で、ファイル `foo/bar/foobar.txt` が含まれ、リモート ディレクトリが `/uploads/` であるとします。 選択すると、ファイルは `/uploads/foo/bar/foobar.txt` にアップロードされます。選択しないと、`/uploads/foobar.txt` にアップロードされます。",
+ "loc.input.label.trustSSL": "サーバー証明書を信頼する",
+ "loc.input.help.trustSSL": "このオプションを選択すると、FTP サーバーの SSL 証明書が、自己署名されている場合や証明書機関 (CA) によって検証できない場合であっても ftps:// によって信頼できるようになります。",
+ "loc.input.label.customCmds": "FTP コマンド",
+ "loc.input.help.customCmds": "接続時にリモート FTP サーバーに送信されるオプションの FTP コマンドです。",
+ "loc.messages.CleanRemoteDir": "リモート ディレクトリを削除しています: %s",
+ "loc.messages.CleanRemoteDirContents": "リモート ディレクトリのコンテンツを削除しています: %s",
+ "loc.messages.CleanFileDeleteFail": "ファイルを削除しようとしている間にエラーが発生しました: %s",
+ "loc.messages.ConnectPort": "次に接続しています: %s:%s",
+ "loc.messages.Disconnected": "切断されました",
+ "loc.messages.DisconnectHost": "次から切断しています: %s",
+ "loc.messages.FTPConnected": "接続されました: %s",
+ "loc.messages.InvalidFTPOptions": "FTP オプションの読み取り中にエラーが発生しました: %s",
+ "loc.messages.FTPNoHostSpecified": "FTP サーバーの URL には、ホスト名を含める必要があります",
+ "loc.messages.FTPNoProtocolSpecified": "FTP サーバーの URL は、ftp:// または ftps:// で始める必要があります",
+ "loc.messages.NoFilesFound": "アップロード対象のファイルが見つかりませんでした",
+ "loc.messages.UploadRemoteDir": "リモート ディレクトリにファイルをアップロードしています: %s",
+ "loc.messages.UploadSucceedMsg": "FTP が正常にアップロードされました %s",
+ "loc.messages.UploadSucceedRes": "FTP が正常にアップロードされました",
+ "loc.messages.UploadFailed": "FTP アップロードに失敗しました"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..971cb146e2e6
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP 업로드",
+ "loc.helpMarkDown": "FTP(파일 전송 프로토콜)를 사용하거나 FTPS를 사용하여 안전하게 파일을 원격 컴퓨터에 업로드합니다. [자세한 정보](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "FTP를 사용하여 파일을 업로드합니다.",
+ "loc.instanceNameFormat": "FTP 업로드: $(rootFolder)",
+ "loc.group.displayName.advanced": "고급",
+ "loc.input.label.credsType": "인증 방법",
+ "loc.input.help.credsType": "FTP 서비스 연결을 사용하거나 연결 자격 증명을 입력합니다.",
+ "loc.input.label.serverEndpoint": "FTP 서비스 연결",
+ "loc.input.help.serverEndpoint": "FTP 서버의 서비스 연결을 선택합니다. 서비스 연결을 만들려면 [관리] 링크를 클릭하고 새 일반 서비스 연결을 만든 후 서버 URL의 FTP 서버 URL(예: 'ftp://server.example.com' ) 및 필요한 자격 증명을 입력합니다.
대상 서버가 FTPS를 지원하는 경우 지정된 프로토콜('ftp://' 또는 'ftps://' )과 관계없이 항상 보안 연결이 만들어집니다. 보안 연결만 허용하려면 'ftps://' 프로토콜(예: 'ftps://server.example.com' )을 사용합니다. 'ftps://' 가 지정된 경우 FTPS를 지원하지 않는 서버에 연결할 수 없습니다.",
+ "loc.input.label.serverUrl": "서버 URL",
+ "loc.input.label.username": "사용자 이름",
+ "loc.input.label.password": "암호",
+ "loc.input.label.rootFolder": "루트 폴더",
+ "loc.input.help.rootFolder": "파일을 업로드할 소스 폴더입니다.",
+ "loc.input.label.filePatterns": "파일 패턴",
+ "loc.input.help.filePatterns": "업로드할 파일의 파일 경로 또는 패턴입니다. 여러 줄로 된 minimatch 패턴을 지원합니다. [자세한 정보](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "원격 디렉터리",
+ "loc.input.help.remotePath": "파일을 원격 FTP 서버의 이 디렉터리에 업로드합니다.",
+ "loc.input.label.enableUtf8": "UTF8 지원 사용",
+ "loc.input.help.enableUtf8": "FTP 연결에 대해 UTF-8 지원을 사용합니다('OPTS UTF8 ON').",
+ "loc.input.label.clean": "원격 디렉터리 삭제",
+ "loc.input.help.clean": "업로드 전에 해당 콘텐츠를 포함하여 원격 디렉터리를 삭제합니다.",
+ "loc.input.label.cleanContents": "원격 디렉터리 콘텐츠 지우기",
+ "loc.input.help.cleanContents": "업로드 전에 원격 디렉터리의 모든 콘텐츠를 재귀적으로 삭제합니다. 기존 디렉터리는 삭제되지 않습니다. 성능을 향상하려면 '원격 디렉터리 삭제'를 대신 사용하는 것이 좋습니다.",
+ "loc.input.label.preservePaths": "파일 경로 유지",
+ "loc.input.help.preservePaths": "선택하는 경우 파일이 업로드되는 원격 디렉터리 아래에 상대 로컬 디렉터리 구조가 다시 만들어집니다. 선택하지 않으면 추가 하위 디렉터리가 만들어지지 않고 파일이 원격 디렉터리에 직접 업로드됩니다.
예를 들어 소스 폴더가 `/home/user/source/` 이고 `foo/bar/foobar.txt` 파일을 포함하고 있으며, 원격 디렉터리는 `/uploads/` 라고 가정합니다. 선택하는 경우 파일은 `/uploads/foo/bar/foobar.txt` 에 업로드됩니다. 선택하지 않으면 `/uploads/foobar.txt` 에 업로드됩니다.",
+ "loc.input.label.trustSSL": "서버 인증서 신뢰",
+ "loc.input.help.trustSSL": "이 옵션을 선택하면 FTP 서버의 SSL 인증서가 자체 서명되거나 CA(인증 기관)에서 그 유효성을 검사할 수 없더라도 해당 인증서가 ftps://로 신뢰됩니다.",
+ "loc.input.label.customCmds": "FTP 명령",
+ "loc.input.help.customCmds": "연결 시 원격 FTP 서버에 전송되는 선택적 FTP 명령입니다.",
+ "loc.messages.CleanRemoteDir": "원격 디렉터리를 제거하는 중: %s",
+ "loc.messages.CleanRemoteDirContents": "원격 디렉터리 콘텐츠를 제거하는 중: %s",
+ "loc.messages.CleanFileDeleteFail": "파일을 제거하는 중 오류 발생: %s",
+ "loc.messages.ConnectPort": "%s:%s에 연결하는 중입니다.",
+ "loc.messages.Disconnected": "연결 끊김",
+ "loc.messages.DisconnectHost": "%s에서 연결을 끊는 중입니다.",
+ "loc.messages.FTPConnected": "%s이(가) 연결되었습니다.",
+ "loc.messages.InvalidFTPOptions": "FTP 옵션을 읽는 동안 오류가 발생했습니다. %s",
+ "loc.messages.FTPNoHostSpecified": "FTP 서버 URL은 호스트 이름을 포함해야 합니다.",
+ "loc.messages.FTPNoProtocolSpecified": "FTP 서버 URL은 ftp:// 또는 ftps://로 시작해야 합니다.",
+ "loc.messages.NoFilesFound": "언로드할 파일을 찾을 수 없습니다.",
+ "loc.messages.UploadRemoteDir": "파일을 원격 디렉터리로 업로드하는 중입니다. %s",
+ "loc.messages.UploadSucceedMsg": "FTP 업로드 성공 %s",
+ "loc.messages.UploadSucceedRes": "FTP 업로드 성공",
+ "loc.messages.UploadFailed": "FTP 업로드에 실패했습니다."
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..7300365fe28e
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "Отправка по FTP",
+ "loc.helpMarkDown": "Передача файлов на удаленный компьютер по протоколу FTP или защищенному протоколу FTPS. [Дополнительные сведения](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Отправка файлов по FTP",
+ "loc.instanceNameFormat": "Отправка по FTP: $(rootFolder)",
+ "loc.group.displayName.advanced": "Дополнительно",
+ "loc.input.label.credsType": "Способ проверки подлинности",
+ "loc.input.help.credsType": "Используйте подключение к службе FTP или введите учетные данные подключения.",
+ "loc.input.label.serverEndpoint": "Подключение к службе FTP",
+ "loc.input.help.serverEndpoint": "Выберите подключение к службе для FTP-сервера. Чтобы создать подключение, щелкните ссылку \"Управление\" и создайте универсальное подключение к службе, введите URL-адрес FTP-сервера в поле \"URL-адрес сервера\" (например, ftp://server.example.com ) и необходимые учетные данные.
Если конечный сервер поддерживает FTPS, всегда будут устанавливаться безопасные подключения независимо от указанного протокола (ftp:// или ftps:// ). Чтобы разрешить только безопасные подключения, используйте протокол ftps:// , например ftps://server.example.com . Если указан протокол ftps:// , подключения к серверам, не поддерживающим FTPS, будут завершаться ошибкой.",
+ "loc.input.label.serverUrl": "URL-адрес сервера",
+ "loc.input.label.username": "Имя пользователя",
+ "loc.input.label.password": "Пароль",
+ "loc.input.label.rootFolder": "Корневая папка",
+ "loc.input.help.rootFolder": "Исходная папка, из которой выполняется отправка файлов.",
+ "loc.input.label.filePatterns": "Шаблоны файлов",
+ "loc.input.help.filePatterns": "Пути к файлам или шаблоны файлов для отправки. Поддерживает несколько строк шаблонов minimatch. [Подробнее...](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Удаленный каталог",
+ "loc.input.help.remotePath": "Отправлять файлы в этот каталог на удаленном FTP-сервере.",
+ "loc.input.label.enableUtf8": "Включить поддержку UTF8",
+ "loc.input.help.enableUtf8": "Включает поддержку UTF-8 для FTP-подключения (OPTS UTF8 ON).",
+ "loc.input.label.clean": "Удалить удаленный каталог",
+ "loc.input.help.clean": "Удалить удаленный каталог, включая его содержимое, перед отправкой.",
+ "loc.input.label.cleanContents": "Очистить содержимое удаленного каталога",
+ "loc.input.help.cleanContents": "Рекурсивно удалить все содержимое удаленного каталога перед отправкой. Существующий каталог не удаляется. Для повышения производительности используйте вместо этого функцию \"Удалить удаленный каталог\".",
+ "loc.input.label.preservePaths": "Сохранять пути к файлам",
+ "loc.input.help.preservePaths": "Если этот флажок установлен, структура относительного локального каталога пересоздается в удаленном каталоге, в который отправляются файлы. В противном случае файлы отправляются напрямую в удаленный каталог без создания дополнительных подкаталогов.
Предположим, ваша исходная папка — /home/user/source/ , которая содержит файл foo/bar/foobar.txt , а удаленный каталог — /uploads/ . Если флажок установлен, файл отправляется в папку /uploads/foo/bar/foobar.txt . В противном случае он отправляется в папку /uploads/foobar.txt .",
+ "loc.input.label.trustSSL": "Доверять сертификату сервера",
+ "loc.input.help.trustSSL": "При выборе этого параметра SSL-сертификат FTP-сервера становится доверенным для ftps://, даже если он является самозаверяющим или центр сертификации не может подтвердить его подлинность.",
+ "loc.input.label.customCmds": "Команды FTP",
+ "loc.input.help.customCmds": "Необязательные команды FTP, которые будут отправлены удаленному серверу FTP при подключении.",
+ "loc.messages.CleanRemoteDir": "удаляется удаленный каталог: %s",
+ "loc.messages.CleanRemoteDirContents": "удаляется содержимое удаленного каталога: %s",
+ "loc.messages.CleanFileDeleteFail": "произошла ошибка при удалении файла: %s",
+ "loc.messages.ConnectPort": "подключено к: %s:%s",
+ "loc.messages.Disconnected": "отключено",
+ "loc.messages.DisconnectHost": "отключение от: %s",
+ "loc.messages.FTPConnected": "подключено: %s",
+ "loc.messages.InvalidFTPOptions": "Произошла ошибка при чтении параметров FTP: %s",
+ "loc.messages.FTPNoHostSpecified": "В URL-адресе FTP-сервера должно быть указано имя узла.",
+ "loc.messages.FTPNoProtocolSpecified": "URL-адрес FTP-сервера должен начинаться с \"ftp://\" или \"ftps://\"",
+ "loc.messages.NoFilesFound": "Не удалось найти файлы для отправки",
+ "loc.messages.UploadRemoteDir": "отправка файлов в удаленный каталог: %s",
+ "loc.messages.UploadSucceedMsg": "Отправка по FTP успешно завершена: %s",
+ "loc.messages.UploadSucceedRes": "Отправка по FTP успешно завершена.",
+ "loc.messages.UploadFailed": "Не удалось отправить по FTP"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..f97312549302
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP 上传",
+ "loc.helpMarkDown": "使用文件传输协议(FTP)将文件上传到远程计算机,或使用 FTPS 安全上传。[详细信息](http://go.microsoft.com/fwlink/?LinkId=809084)。",
+ "loc.description": "使用 FTP 上传文件",
+ "loc.instanceNameFormat": "FTP 上传: $(rootFolder)",
+ "loc.group.displayName.advanced": "高级",
+ "loc.input.label.credsType": "身份验证方法",
+ "loc.input.help.credsType": "使用 FTP 服务连接或输入连接凭据。",
+ "loc.input.label.serverEndpoint": "FTP 服务连接",
+ "loc.input.help.serverEndpoint": "选择 FTP 服务器的服务连接。若要创建一个,可单击管理链接并创建新的通用服务连接,为服务器 URL 输入 FTP 服务器 URL,例如,\"ftp://server.example.com\" ,以及所需的凭据。
如果目标服务器支持 FTPS,无论指定了什么协议,都会建立安全连接(\"ftp://\" 或 \"ftps://\" )。若要仅允许安全连接,请使用 \"ftps://\" 协议,例如,\"ftps://server.example.com\" 。如果指定了 \"ftps://\" ,则连接不支持 FTPS 的服务器将失败。",
+ "loc.input.label.serverUrl": "服务器 URL",
+ "loc.input.label.username": "用户名",
+ "loc.input.label.password": "密码",
+ "loc.input.label.rootFolder": "根文件夹",
+ "loc.input.help.rootFolder": "要上传其中文件的源文件夹。",
+ "loc.input.label.filePatterns": "文件模式",
+ "loc.input.help.filePatterns": "要上传的文件的文件路径或模式。支持多行最小匹配模式。[详细信息](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "远程目录",
+ "loc.input.help.remotePath": "将文件上传到远程 FTP 服务器上的该目录中。",
+ "loc.input.label.enableUtf8": "启用 UTF8 支持",
+ "loc.input.help.enableUtf8": "为 FTP 连接启用 UTF-8 支持(\"OPTS UTF8 ON\")。",
+ "loc.input.label.clean": "删除远程目录",
+ "loc.input.help.clean": "上传前,请删除远程目录及其内容。",
+ "loc.input.label.cleanContents": "清除远程目录内容",
+ "loc.input.help.cleanContents": "上传前,请以递归方式删除所有远程目录的内容。不会删除现有目录。要提高性能,请考虑改用“删除远程目录”。",
+ "loc.input.label.preservePaths": "保留文件路径",
+ "loc.input.help.preservePaths": "如果选中,将在上传文件的远程目录下重新创建有关本地目录结构。否则,会将文件直接上传到远程目录而不创建其他子目录。
例如,假设源文件夹为: `/home/user/source/` ,它包含文件: `foo/bar/foobar.txt` ,而远程目录为: `/uploads/` 。 如果选中,文件将上传到: `/ uploads/foo/bar/foobar.txt` 。否则上传到: `/ uploads/foobar.txt` 。",
+ "loc.input.label.trustSSL": "信任服务器证书",
+ "loc.input.help.trustSSL": "选择此选项将通过 ftps:// 信任 FTP 服务器的 SSL 证书,即使它是自签名证书或无法由证书颁发机构(CA)验证的证书。",
+ "loc.input.label.customCmds": "FTP 命令",
+ "loc.input.help.customCmds": "连接时将发送到远程 FTP 服务器的可选 FTP 命令。",
+ "loc.messages.CleanRemoteDir": "正在删除远程目录: %s",
+ "loc.messages.CleanRemoteDirContents": "正在删除远程目录内容: %s",
+ "loc.messages.CleanFileDeleteFail": "尝试删除文件时出错: %s",
+ "loc.messages.ConnectPort": "正在连接到: %s:%s",
+ "loc.messages.Disconnected": "已断开连接",
+ "loc.messages.DisconnectHost": "正在断开与 %s 的连接 ",
+ "loc.messages.FTPConnected": "已连接: %s",
+ "loc.messages.InvalidFTPOptions": "阅读 FTP 选项时出现错误: %s",
+ "loc.messages.FTPNoHostSpecified": "FTP 服务器 URL 必需包括主机名",
+ "loc.messages.FTPNoProtocolSpecified": "FTP 服务器 URL 必需以 ftp:// 或 ftps:// 开头",
+ "loc.messages.NoFilesFound": "找不到任何要上传的文件",
+ "loc.messages.UploadRemoteDir": "正在将文件上传到远程目录: %s",
+ "loc.messages.UploadSucceedMsg": "FTP 已成功上传 %s",
+ "loc.messages.UploadSucceedRes": "FTP 已成功上传",
+ "loc.messages.UploadFailed": "FTP 上传失败"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/FtpUploadV2/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..a194a934ea42
--- /dev/null
+++ b/_generated/FtpUploadV2/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP 上傳",
+ "loc.helpMarkDown": "使用檔案傳輸通訊協定 (FTP) 或更安全的 FTPS,將檔案上傳到遠端電腦。[詳細資訊](http://go.microsoft.com/fwlink/?LinkId=809084)。",
+ "loc.description": "使用 FTP 上傳檔案",
+ "loc.instanceNameFormat": "FTP 上傳: $(rootFolder)",
+ "loc.group.displayName.advanced": "進階",
+ "loc.input.label.credsType": "驗證方法",
+ "loc.input.help.credsType": "請使用 FTP 服務連線,或輸入連線認證。",
+ "loc.input.label.serverEndpoint": "FTP 服務連線",
+ "loc.input.help.serverEndpoint": "請為您的 FTP 伺服器選取服務連線。若要建立服務連線,請按一下 [管理連結],然後建立新的泛型服務連線,輸入伺服器 URL 的 FTP 伺服器 URL (例如: `ftp://server.example.com` ) 和必要認證。
無論指定何種通訊協定 ('ftp://' 或 'ftps://' ),只要目標伺服器支援 FTPS,一律會建立安全連線。若要只允許安全連線,請使用 'ftps://' 通訊協定,例如 'ftps://server.example.com' 。若指定了 'ftps://' ,但伺服器不支援 FTPS,連線將會失敗。",
+ "loc.input.label.serverUrl": "伺服器 URL",
+ "loc.input.label.username": "使用者名稱",
+ "loc.input.label.password": "密碼",
+ "loc.input.label.rootFolder": "根資料夾",
+ "loc.input.help.rootFolder": "要上傳之檔案所在的來源資料夾。",
+ "loc.input.label.filePatterns": "檔案模式",
+ "loc.input.help.filePatterns": "要上傳之檔案的檔案路徑或樣式。支援多行的 minimatch 樣式。[詳細資訊](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "遠端目錄",
+ "loc.input.help.remotePath": "將檔案上傳到遠端 FTP 伺服器上的此目錄。",
+ "loc.input.label.enableUtf8": "啟用 UTF8 支援",
+ "loc.input.help.enableUtf8": "為 FTP 連線啟用 UTF-8 支援 ('OPTS UTF8 ON')。",
+ "loc.input.label.clean": "刪除遠端目錄",
+ "loc.input.help.clean": "先刪除遠端目錄 (包括其內容) 再上傳。",
+ "loc.input.label.cleanContents": "清除遠端目錄內容",
+ "loc.input.help.cleanContents": "先以遞迴方式刪除遠端目錄的所有內容再上傳。現有的目錄不會刪除。為達更佳效能,請考慮改為使用 `Delete remote directory`。",
+ "loc.input.label.preservePaths": "保留檔案路徑",
+ "loc.input.help.preservePaths": "如有選取,會在檔案上傳的遠端目錄下重新建立相對的本機目錄結構。否則,檔案會直接上傳到遠端目錄,而不會另外建立其他子目錄。
例如,假設您的來源資料來為 '/home/user/source/' ,其中包含了檔案 'foo/bar/foobar.txt' ,而您的遠端目錄為 '/uploads/' 。 如有選取,檔案會上傳到 '/uploads/foo/bar/foobar.txt' ,否則會上傳到 '/uploads/foobar.txt' 。",
+ "loc.input.label.trustSSL": "信任伺服器憑證",
+ "loc.input.help.trustSSL": "選取此選項會導致 FTP 伺服器的 SSL 憑證受 ftps:// 信任,即使它是自我簽署的憑證,或是憑證授權單位 (CA) 無法驗證的憑證亦然。",
+ "loc.input.label.customCmds": "FTP 命令",
+ "loc.input.help.customCmds": "連線時要傳送給遠端 FTP 伺服器的選用 FTP 命令。",
+ "loc.messages.CleanRemoteDir": "正在移除遠端目錄: %s",
+ "loc.messages.CleanRemoteDirContents": "正在移除遠端目錄內容: %s",
+ "loc.messages.CleanFileDeleteFail": "嘗試移除檔案時發生錯誤: %s",
+ "loc.messages.ConnectPort": "正在連線到: %s:%s",
+ "loc.messages.Disconnected": "已中斷連線",
+ "loc.messages.DisconnectHost": "正在中斷下項的連線: %s",
+ "loc.messages.FTPConnected": "已連線: %s",
+ "loc.messages.InvalidFTPOptions": "讀取 FTP 選項時發生錯誤: %s",
+ "loc.messages.FTPNoHostSpecified": "FTP 伺服器 URL 必須包含主機名稱。",
+ "loc.messages.FTPNoProtocolSpecified": "FTP 伺服器 URL 的開頭必須是 ftp:// 或 ftps://",
+ "loc.messages.NoFilesFound": "找不到任何要上傳的檔案",
+ "loc.messages.UploadRemoteDir": "正在將檔案上傳至遠端目錄: %s",
+ "loc.messages.UploadSucceedMsg": "FTP 上傳成功 %s",
+ "loc.messages.UploadSucceedRes": "FTP 上傳成功",
+ "loc.messages.UploadFailed": "Ftp 上傳失敗"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/Tests/L0.ts b/_generated/FtpUploadV2/Tests/L0.ts
new file mode 100644
index 000000000000..a898ec6b1fd7
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0.ts
@@ -0,0 +1,140 @@
+import fs = require('fs');
+import assert = require('assert');
+import path = require('path');
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('FtpUploadV2 Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT!) || 20000);
+
+ it('check args: no serverEndpoint', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoServerEndpoint.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: serverEndpoint'), 'Should have printed: Input required: serverEndpoint');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no rootFolder', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoRootFolder.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: rootFolder'), 'Should have printed: Input required: rootFolder');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no filePatterns', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoFilePatterns.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: filePatterns'), 'Should have printed: Input required: filePatterns');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no remotePath', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoRemotePath.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: remotePath'), 'Should have printed: Input required: remotePath');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no clean', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoClean.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: clean'), 'Should have printed: Input required: clean');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no preservePaths', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoPreservePaths.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: preservePaths'), 'Should have printed: Input required: preservePaths');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no trustSSL', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoTrustSSL.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.invokedToolCount === 0, 'should not run anything');
+ assert(tr.stdOutContained('Input required: trustSSL'), 'Should have printed: Input required: trustSSL');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no protocol on server URL (ftp:// or ftps://)', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoProtocol.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('loc_mock_FTPNoProtocolSpecified'), 'Should have printed: loc_mock_FTPNoProtocolSpecified');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no host name on server URL', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoHostName.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('loc_mock_FTPNoHostSpecified'), 'Should have printed: loc_mock_FTPNoHostSpecified');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no files found', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoFilesFound.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('loc_mock_NoFilesFound'), 'Should have printed: loc_mock_NoFilesFound');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('task should complete successfully', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0Successful.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+ console.info(tr.stdout);
+ assert(tr.succeeded, 'task should succeed');
+
+ done();
+ });
+});
diff --git a/_generated/FtpUploadV2/Tests/L0NoClean.ts b/_generated/FtpUploadV2/Tests/L0NoClean.ts
new file mode 100644
index 000000000000..1fb4547bf018
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoClean.ts
@@ -0,0 +1,39 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoFilePatterns.ts b/_generated/FtpUploadV2/Tests/L0NoFilePatterns.ts
new file mode 100644
index 000000000000..f0a851fd78f4
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoFilePatterns.ts
@@ -0,0 +1,37 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoFilesFound.ts b/_generated/FtpUploadV2/Tests/L0NoFilesFound.ts
new file mode 100644
index 000000000000..a17d784d78b9
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoFilesFound.ts
@@ -0,0 +1,39 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('credsType', 'inputs');
+tr.setInput('serverUrl', 'ftps://');
+tr.setInput('username', 'username');
+tr.setInput('password', 'password');
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+tr.setInput('trustSSL', 'true');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ ]
+ },
+ "match": {
+ "*": [
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoHostName.ts b/_generated/FtpUploadV2/Tests/L0NoHostName.ts
new file mode 100644
index 000000000000..ca9b0196d05b
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoHostName.ts
@@ -0,0 +1,45 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('credsType', 'inputs');
+tr.setInput('serverUrl', 'ftps://');
+tr.setInput('username', 'username');
+tr.setInput('password', 'password');
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+tr.setInput('trustSSL', 'true');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoPreservePaths.ts b/_generated/FtpUploadV2/Tests/L0NoPreservePaths.ts
new file mode 100644
index 000000000000..85662c7fdade
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoPreservePaths.ts
@@ -0,0 +1,41 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoProtocol.ts b/_generated/FtpUploadV2/Tests/L0NoProtocol.ts
new file mode 100644
index 000000000000..44c84485f9e0
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoProtocol.ts
@@ -0,0 +1,45 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('credsType', 'inputs');
+tr.setInput('serverUrl', 'noprotocol.microsoft.com');
+tr.setInput('username', 'myUsername');
+tr.setInput('password', 'myPassword');
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+tr.setInput('trustSSL', 'true');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoRemotePath.ts b/_generated/FtpUploadV2/Tests/L0NoRemotePath.ts
new file mode 100644
index 000000000000..87a673e707d4
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoRemotePath.ts
@@ -0,0 +1,38 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoRootFolder.ts b/_generated/FtpUploadV2/Tests/L0NoRootFolder.ts
new file mode 100644
index 000000000000..8972a7ec6c12
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoRootFolder.ts
@@ -0,0 +1,36 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoServerEndpoint.ts b/_generated/FtpUploadV2/Tests/L0NoServerEndpoint.ts
new file mode 100644
index 000000000000..ba9740684299
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoServerEndpoint.ts
@@ -0,0 +1,37 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('credsType', 'serviceEndpoint');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "getVariable": {
+ "ENDPOINT_URL_ID1": "ftp://valid.microsoft.com",
+ "ENDPOINT_AUTH_ID1": "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}",
+ "build.sourcesDirectory": "/"
+ },
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0NoTrustSSL.ts b/_generated/FtpUploadV2/Tests/L0NoTrustSSL.ts
new file mode 100644
index 000000000000..fdc2d6b5dabf
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0NoTrustSSL.ts
@@ -0,0 +1,42 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/L0Successful.ts b/_generated/FtpUploadV2/Tests/L0Successful.ts
new file mode 100644
index 000000000000..338049fe5181
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/L0Successful.ts
@@ -0,0 +1,72 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+const ftp = {
+ Client: function () {
+ this.ftp = {
+ log: () => { }
+ };
+ this.access = (options: any) => {
+ return {
+ message: "ftp mock response",
+ };
+ };
+ this.trackProgress = (callback: (info: any) => void) => {
+
+ };
+ this.send = (cmd: string) => {
+
+ };
+ this.ensureDir = (path: string) => { };
+ this.removeDir = (path: string) => { };
+ this.close = () => { };
+ },
+ ftp: {},
+ access: {},
+ trackProgress: {},
+ send: {},
+ ensureDir: {},
+ removeDir: {},
+ close: {},
+}
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+tr.setInput('trustSSL', 'true');
+tr.registerMock("basic-ftp", ftp);
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2/Tests/package-lock.json b/_generated/FtpUploadV2/Tests/package-lock.json
new file mode 100644
index 000000000000..04ef5eaf8472
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "ftp-upload-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/_generated/FtpUploadV2/Tests/package.json b/_generated/FtpUploadV2/Tests/package.json
new file mode 100644
index 000000000000..5d38af358649
--- /dev/null
+++ b/_generated/FtpUploadV2/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "ftp-upload-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines FTP Upload V2 Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.7"
+ }
+}
diff --git a/_generated/FtpUploadV2/ThirdPartyNotice.txt b/_generated/FtpUploadV2/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..8e204374d4ab
--- /dev/null
+++ b/_generated/FtpUploadV2/ThirdPartyNotice.txt
@@ -0,0 +1,300 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (FtpUploadV2) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. azure-pipelines-task-lib (git+https://github.com/Microsoft/azure-pipelines-task-lib.git)
+3. balanced-match (git://github.com/juliangruber/balanced-match.git)
+4. basic-ftp (git+https://github.com/patrickjuchli/basic-ftp.git)
+5. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+6. concat-map (git://github.com/substack/node-concat-map.git)
+7. minimatch (git://github.com/isaacs/minimatch.git)
+8. mockery (git://github.com/mfncooper/mockery.git)
+9. q (git://github.com/kriskowal/q.git)
+10. semver (git+https://github.com/npm/node-semver.git)
+11. shelljs (git://github.com/arturadib/shelljs.git)
+12. uuid (git+https://github.com/kelektiv/node-uuid.git)
+
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% basic-ftp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2019 Patrick Juchli
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF basic-ftp NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/FtpUploadV2/ftpuploadtask.ts b/_generated/FtpUploadV2/ftpuploadtask.ts
new file mode 100644
index 000000000000..721da631ab58
--- /dev/null
+++ b/_generated/FtpUploadV2/ftpuploadtask.ts
@@ -0,0 +1,393 @@
+import * as tl from "azure-pipelines-task-lib/task";
+import * as ftp from "basic-ftp";
+import * as fs from "fs";
+import * as os from "os";
+import * as path from "path";
+import * as url from "url";
+import { MatchOptions } from "azure-pipelines-task-lib/task";
+
+interface FtpOptions {
+ // url
+ serverEndpointUrl: url.Url;
+
+ // credentials
+ username: string;
+ password: string;
+
+ // other standard options
+ rootFolder: string;
+ filePatterns: string[];
+ remotePath: string;
+
+ // advanced options
+ clean: boolean;
+ cleanContents: boolean;
+ preservePaths: boolean;
+ trustSSL: boolean;
+ implicitFTPS: boolean;
+ enableUtf8: boolean;
+ customCmds: string[];
+}
+
+class ProgressTracker {
+ progressFilesUploaded: number = 0;
+ progressDirectoriesProcessed: number = 0;
+
+ constructor(private ftpOptions: FtpOptions, private fileCount: number) {
+ this.ftpOptions = ftpOptions;
+ this.fileCount = fileCount;
+ }
+
+ directoryProcessed(name: string): void {
+ this.progressDirectoriesProcessed++;
+ this.printProgress(
+ "remote directory successfully created/verified: " + name
+ );
+ }
+
+ fileUploaded(file: string, remoteFile: string): void {
+ this.progressFilesUploaded++;
+ this.printProgress("successfully uploaded: " + file + " to: " + remoteFile);
+ }
+
+ printProgress(message: string): void {
+ const total: number =
+ this.progressFilesUploaded + this.progressDirectoriesProcessed;
+ const remaining: number = this.fileCount - total;
+ console.log(
+ "files uploaded: " + this.progressFilesUploaded +
+ ", directories processed: " + this.progressDirectoriesProcessed +
+ ", total: " + total +
+ ", remaining: " + remaining +
+ ", " + message
+ );
+ }
+
+ getSuccessStatusMessage(): string {
+ return (
+ os.EOL + "host: " + this.ftpOptions.serverEndpointUrl.host +
+ os.EOL + "path: " + this.ftpOptions.remotePath +
+ os.EOL + "files uploaded: " + this.progressFilesUploaded +
+ os.EOL + "directories processed: " + this.progressDirectoriesProcessed
+ );
+ }
+
+ getFailureStatusMessage(): string {
+ const total: number =
+ this.progressFilesUploaded + this.progressDirectoriesProcessed;
+ const remaining: number = this.fileCount - total;
+ return (
+ this.getSuccessStatusMessage() + os.EOL + "unprocessed files & directories: " + remaining
+ );
+ }
+}
+
+function findFiles(ftpOptions: FtpOptions): string[] {
+ tl.debug("Searching for files to upload");
+ try {
+ const rootFolderStats = tl.stats(ftpOptions.rootFolder);
+ if (rootFolderStats.isFile()) {
+ const file = ftpOptions.rootFolder;
+ tl.debug(file + " is a file. Ignoring all file patterns");
+ return [file];
+ }
+
+ const allFiles = tl.find(ftpOptions.rootFolder);
+
+ // filePatterns is a multiline input containing glob patterns
+ tl.debug(
+ "searching for files using: " +
+ ftpOptions.filePatterns.length +
+ " filePatterns: " +
+ ftpOptions.filePatterns
+ );
+
+ // minimatch options
+ const matchOptions = { matchBase: true, dot: true } as MatchOptions;
+ const platform = tl.getPlatform()
+ tl.debug("Platform: " + platform);
+ if (platform === tl.Platform.Windows) {
+ matchOptions["nocase"] = true;
+ }
+
+ tl.debug("Candidates found for match: " + allFiles.length);
+ for (let i = 0; i < allFiles.length; i++) {
+ tl.debug("file: " + allFiles[i]);
+ }
+
+ // use a set to avoid duplicates
+ let matchingFilesSet: Set = new Set();
+
+ for (let i = 0; i < ftpOptions.filePatterns.length; i++) {
+ let normalizedPattern: string = path.join(
+ ftpOptions.rootFolder,
+ path.normalize(ftpOptions.filePatterns[i])
+ );
+
+ tl.debug("searching for files, pattern: " + normalizedPattern);
+
+ const matched = tl.match(allFiles, normalizedPattern, undefined, matchOptions);
+ tl.debug("Found total matches: " + matched.length);
+ // ensure each result is only added once
+ for (let j = 0; j < matched.length; j++) {
+ let match = path.normalize(matched[j]);
+ let stats = tl.stats(match);
+ if (!ftpOptions.preservePaths && stats.isDirectory()) {
+ // if not preserving paths, skip all directories
+ } else if (matchingFilesSet.add(match)) {
+ tl.debug(
+ "adding " + (stats.isFile() ? "file: " : "folder: ") + match
+ );
+ if (stats.isFile() && ftpOptions.preservePaths) {
+ // if preservePaths, make sure the parent directory is also included
+ let parent = path.normalize(path.dirname(match));
+ if (matchingFilesSet.add(parent)) {
+ tl.debug("adding folder: " + parent);
+ }
+ }
+ }
+ }
+ }
+
+ return Array.from(matchingFilesSet).sort();
+ }
+ catch (err) {
+ tl.error(err);
+ tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
+ }
+
+ return [];
+}
+
+function getFtpOptions(): FtpOptions {
+ let serverEndpointUrl: url.UrlWithStringQuery;
+ let username: string;
+ let password: string;
+
+ if (tl.getInput("credsType") === "serviceEndpoint") {
+ // server endpoint
+ const serverEndpoint: string = tl.getInput("serverEndpoint", true)!;
+ serverEndpointUrl = url.parse(
+ tl.getEndpointUrl(serverEndpoint, false)!
+ );
+
+ const serverEndpointAuth: tl.EndpointAuthorization = tl.getEndpointAuthorization(
+ serverEndpoint,
+ false
+ )!;
+ username = serverEndpointAuth["parameters"]["username"];
+ password = serverEndpointAuth["parameters"]["password"];
+ } else {
+ // user entered credentials directly
+ serverEndpointUrl = url.parse(tl.getInput("serverUrl", true)!);
+ username = tl.getInput("username", true)!;
+ password = tl.getInput("password", true)!;
+ }
+
+ return {
+ serverEndpointUrl: serverEndpointUrl,
+ username: username,
+ password: password,
+
+ // other standard options
+ rootFolder: tl.getPathInput("rootFolder", true)!,
+ filePatterns: tl.getDelimitedInput("filePatterns", "\n", true),
+ remotePath: tl.getInput("remotePath", true)!.trim().replace(/\\/gi, "/"), // use forward slashes always
+
+ // advanced options
+ clean: tl.getBoolInput("clean", true),
+ cleanContents: tl.getBoolInput("cleanContents", false),
+ preservePaths: tl.getBoolInput("preservePaths", true),
+ trustSSL: tl.getBoolInput("trustSSL", true),
+ implicitFTPS: tl.getBoolInput("implicitFTPS", false),
+ enableUtf8: tl.getBoolInput("enableUtf8", false),
+ customCmds: tl.getDelimitedInput("customCmds", "\n", false)
+
+ };
+}
+
+function getAccessOption(options: FtpOptions): ftp.AccessOptions {
+ const protocol = options.serverEndpointUrl.protocol;
+ let secure: boolean | "implicit";
+ if (options.implicitFTPS) {
+ secure = "implicit";
+ }
+ else {
+ secure = !!protocol && protocol.toLowerCase() === "ftps:";
+ }
+
+ const secureOptions: any = { rejectUnauthorized: !options.trustSSL };
+
+ const hostName: string = options.serverEndpointUrl.hostname!;
+ const portStr: string = options.serverEndpointUrl.port!;
+ let port: number = 21;
+ if (portStr) {
+ // port not explicitly specified, use default
+ port = parseInt(portStr);
+ }
+
+ console.log(tl.loc("ConnectPort", hostName, port));
+
+ return {
+ host: hostName,
+ port: port,
+ user: options.username,
+ password: options.password,
+ secure: secure,
+ secureOptions: secureOptions
+ };
+}
+
+async function getFtpClient(options: FtpOptions): Promise {
+ const ftpClient = new ftp.Client();
+ ftpClient.ftp.log = tl.debug;
+ const accessOptions = getAccessOption(options);
+ const response = await ftpClient.access(accessOptions);
+ tl.debug("ftp client greeting");
+ console.log(tl.loc("FTPConnected", response.message));
+
+ ftpClient.trackProgress(info => {
+ console.log(
+ `File: ${info.name} Type: ${info.type} Transferred: ${info.bytes}`
+ );
+ });
+
+ // Run custom commands upon connection
+ if (options.enableUtf8) {
+ await ftpClient.send("OPTS UTF8 ON");
+ }
+
+ if (options.customCmds) {
+ for (const cmd of options.customCmds) {
+ await ftpClient.send(cmd);
+ }
+ }
+
+ return ftpClient;
+}
+
+async function run() {
+ tl.setResourcePath(path.join(__dirname, "task.json"));
+
+ const tries = 3;
+ let ftpOptions: FtpOptions;
+ try {
+ ftpOptions = getFtpOptions();
+ } catch (err) {
+ tl.setResult(tl.TaskResult.Failed, tl.loc('InvalidFTPOptions', err));
+ return;
+ }
+
+ if (!ftpOptions.serverEndpointUrl.protocol) {
+ tl.setResult(tl.TaskResult.Failed, tl.loc("FTPNoProtocolSpecified"));
+ }
+ if (!ftpOptions.serverEndpointUrl.hostname) {
+ tl.setResult(tl.TaskResult.Failed, tl.loc("FTPNoHostSpecified"));
+ }
+
+ const files: string[] = findFiles(ftpOptions);
+ const tracker = new ProgressTracker(ftpOptions, files.length);
+ if (files.length === 0) {
+ tl.warning(tl.loc("NoFilesFound"));
+ return;
+ }
+
+ let ftpClient: ftp.Client;
+ try {
+ ftpClient = await getFtpClient(ftpOptions);
+ } catch (err) {
+ tl.error(err);
+ tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
+ return;
+ }
+
+ let sleep = (milliseconds: number) => {
+ return new Promise(resolve => setTimeout(resolve, milliseconds));
+ }
+
+ let retryWithNewClient = async (task: () => {}, retry: number) => {
+ let e = null;
+ while (retry > 0) {
+ try {
+ await task();
+ return;
+ } catch (err) {
+ e = err;
+ tl.warning(err);
+ ftpClient.close();
+
+ await sleep(1000);
+ ftpClient = await getFtpClient(ftpOptions);
+
+ retry--;
+ }
+ }
+
+ if (e) {
+ throw e;
+ }
+ };
+
+ try {
+ // clean option all assumes the folder exists as it tries to cd into it
+ await retryWithNewClient(async () => {
+ await ftpClient.ensureDir(ftpOptions.remotePath);
+ }, tries);
+ if (ftpOptions.clean) {
+ console.log(tl.loc("CleanRemoteDir", ftpOptions.remotePath));
+ await retryWithNewClient(async () => {
+ await ftpClient.removeDir(ftpOptions.remotePath);
+ }, tries);
+ } else if (ftpOptions.cleanContents) {
+ console.log(tl.loc("CleanRemoteDirContents", ftpOptions.remotePath));
+ await retryWithNewClient(async () => {
+ await ftpClient.cd(ftpOptions.remotePath);
+ await ftpClient.clearWorkingDir();
+ }, tries);
+ }
+
+ // remotely, ensure we are in remote path
+ await retryWithNewClient(async () => {
+ await ftpClient.ensureDir(ftpOptions.remotePath);
+ }, tries);
+
+ for (const file of files) {
+ tl.debug("file: " + file);
+ let remoteFile: string = ftpOptions.preservePaths
+ ? path.join(
+ ftpOptions.remotePath,
+ file.substring(ftpOptions.rootFolder.length)
+ )
+ : path.join(ftpOptions.remotePath, path.basename(file));
+
+ remoteFile = remoteFile.replace(/\\/gi, "/"); // always use forward slashes
+ tl.debug("remoteFile: " + remoteFile);
+
+ let stats = tl.stats(file);
+ if (stats.isDirectory()) {
+ await retryWithNewClient(async () => {
+ await ftpClient.ensureDir(remoteFile);
+ }, tries);
+ tracker.directoryProcessed(remoteFile);
+ } else if (stats.isFile()) {
+ // upload files
+ await retryWithNewClient(async () => {
+ await ftpClient.upload(fs.createReadStream(file), remoteFile);
+ }, tries);
+ tracker.fileUploaded(file, remoteFile);
+ }
+ }
+
+ console.log(tl.loc("UploadSucceedMsg", tracker.getSuccessStatusMessage()));
+ } catch (err) {
+ tl.error(err);
+ console.log(tracker.getFailureStatusMessage());
+ tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
+ } finally {
+ console.log(tl.loc("DisconnectHost", ftpOptions.serverEndpointUrl.host));
+ ftpClient.trackProgress(() => { });
+ ftpClient.close();
+ }
+}
+
+run();
diff --git a/_generated/FtpUploadV2/icon.png b/_generated/FtpUploadV2/icon.png
new file mode 100644
index 000000000000..490abba147c9
Binary files /dev/null and b/_generated/FtpUploadV2/icon.png differ
diff --git a/_generated/FtpUploadV2/icon.svg b/_generated/FtpUploadV2/icon.svg
new file mode 100644
index 000000000000..e5d5684a3791
--- /dev/null
+++ b/_generated/FtpUploadV2/icon.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/_generated/FtpUploadV2/package-lock.json b/_generated/FtpUploadV2/package-lock.json
new file mode 100644
index 000000000000..3a9151fc8d3d
--- /dev/null
+++ b/_generated/FtpUploadV2/package-lock.json
@@ -0,0 +1,488 @@
+{
+ "name": "FTP",
+ "version": "2.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
+ "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw=="
+ },
+ "@types/node": {
+ "version": "16.11.57",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.57.tgz",
+ "integrity": "sha512-diBb5AE2V8h9Fs9zEDtBwSeLvIACng/aAkdZ3ujMV+cGuIQ9Nc/V+wQqurk9HJp8ni5roBxQHW21z/ZYbGDivg=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "basic-ftp": {
+ "version": "4.6.6",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-4.6.6.tgz",
+ "integrity": "sha512-5nTclY5mVxjeFoq9cBTzgQvcM1UfeGTd4hCCvb8AgC88wHMDQCD4UX5hZo2jaiSh96Nf+gFy1joNI9iH639bvQ=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/FtpUploadV2/package.json b/_generated/FtpUploadV2/package.json
new file mode 100644
index 000000000000..eb5d4a0f97f1
--- /dev/null
+++ b/_generated/FtpUploadV2/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "FTP",
+ "version": "2.0.0",
+ "description": "FTP Upload Task",
+ "main": "ftpuploadtask.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^16.11.39",
+ "@types/mocha": "^9.1.1",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0",
+ "basic-ftp": "^4.6.6"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/_generated/FtpUploadV2/task.json b/_generated/FtpUploadV2/task.json
new file mode 100644
index 000000000000..a2ad0e7bd2eb
--- /dev/null
+++ b/_generated/FtpUploadV2/task.json
@@ -0,0 +1,222 @@
+{
+ "id": "6f8c69a5-b023-428e-a125-fccf4efcb929",
+ "name": "FtpUpload",
+ "friendlyName": "FTP upload",
+ "description": "Upload files using FTP",
+ "author": "Microsoft Corporation",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/ftp-upload",
+ "helpMarkDown": "Upload files to a remote machine using the File Transfer Protocol (FTP), or securely with FTPS. [More Information](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [],
+ "version": {
+ "Major": 2,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "FTP Upload: $(rootFolder)",
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "Advanced",
+ "isExpanded": true
+ }
+ ],
+ "inputs": [
+ {
+ "name": "credsType",
+ "aliases": [
+ "credentialsOption"
+ ],
+ "type": "pickList",
+ "label": "Authentication Method",
+ "defaultValue": "serviceEndpoint",
+ "required": true,
+ "helpMarkDown": "Use FTP service connection or enter connection credentials.",
+ "options": {
+ "serviceEndpoint": "FTP service connection",
+ "inputs": "Enter credentials"
+ }
+ },
+ {
+ "name": "serverEndpoint",
+ "type": "connectedService:Generic",
+ "label": "FTP Service Connection",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the service connection for your FTP server. To create one, click the Manage link and create a new Generic service connection, enter the FTP server URL for the server URL, e.g. `ftp://server.example.com` , and required credentials.Secure connections will always be made regardless of the specified protocol (`ftp://` or `ftps://` ) if the target server supports FTPS. To allow only secure connections, use the `ftps://` protocol, e.g. `ftps://server.example.com` . Connections to servers not supporting FTPS will fail if `ftps://` is specified.",
+ "visibleRule": "credsType = serviceEndpoint"
+ },
+ {
+ "name": "serverUrl",
+ "type": "string",
+ "label": "Server URL",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "username",
+ "type": "string",
+ "label": "Username",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "password",
+ "type": "string",
+ "label": "Password",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "implicitFTPS",
+ "type": "boolean",
+ "label": "Use implicit FTPS",
+ "defaultValue": "false",
+ "required": false
+ },
+ {
+ "name": "rootFolder",
+ "aliases": [
+ "rootDirectory"
+ ],
+ "type": "filePath",
+ "label": "Root folder",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "The source folder to upload files from."
+ },
+ {
+ "name": "filePatterns",
+ "type": "multiLine",
+ "label": "File patterns",
+ "defaultValue": "**",
+ "required": true,
+ "helpMarkDown": "File paths or patterns of the files to upload. Supports multiple lines of minimatch patterns. [More Information](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "properties": {
+ "resizable": "true",
+ "rows": "4"
+ }
+ },
+ {
+ "name": "remotePath",
+ "aliases": [
+ "remoteDirectory"
+ ],
+ "type": "string",
+ "label": "Remote directory",
+ "defaultValue": "/upload/$(Build.BuildId)/",
+ "required": true,
+ "helpMarkDown": "Upload files to this directory on the remote FTP server."
+ },
+ {
+ "name": "enableUtf8",
+ "type": "boolean",
+ "label": "Enable UTF8 support",
+ "defaultValue": "false",
+ "required": false,
+ "helpMarkDown": "Enables UTF-8 support for the FTP connection ('OPTS UTF8 ON').",
+ "groupName": "advanced"
+ },
+ {
+ "name": "clean",
+ "type": "boolean",
+ "label": "Delete remote directory",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "Delete the remote directory including its contents before uploading.",
+ "groupName": "advanced"
+ },
+ {
+ "name": "cleanContents",
+ "type": "boolean",
+ "label": "Clear remote directory contents",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "Recursively delete all contents of the remote directory before uploading. The existing directory will not be deleted. For better performance, consider using `Delete remote directory` instead.",
+ "groupName": "advanced",
+ "visibleRule": "clean = false"
+ },
+ {
+ "name": "preservePaths",
+ "type": "boolean",
+ "label": "Preserve file paths",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "If selected, the relative local directory structure is recreated under the remote directory where files are uploaded. Otherwise, files are uploaded directly to the remote directory without creating additional subdirectories.
For example, suppose your source folder is: `/home/user/source/` and contains the file: `foo/bar/foobar.txt` , and your remote directory is: `/uploads/` . If selected, the file is uploaded to: `/uploads/foo/bar/foobar.txt` . Otherwise, to: `/uploads/foobar.txt` .",
+ "groupName": "advanced"
+ },
+ {
+ "name": "trustSSL",
+ "type": "boolean",
+ "label": "Trust server certificate",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "Selecting this option results in the FTP server's SSL certificate being trusted with ftps://, even if it is self-signed or cannot be validated by a Certificate Authority (CA).",
+ "groupName": "advanced"
+ },
+ {
+ "name": "customCmds",
+ "type": "multiLine",
+ "label": "FTP Commands",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "Optional FTP Commands that will be sent to the remote FTP server upon connection.",
+ "groupName": "advanced",
+ "properties": {
+ "resizable": "true",
+ "rows": "2"
+ }
+ }
+ ],
+ "execution": {
+ "Node10": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": []
+ }
+ },
+ "messages": {
+ "CleanRemoteDir": "removing remote directory: %s",
+ "CleanRemoteDirContents": "removing remote directory contents: %s",
+ "CleanFileDeleteFail": "an error occurred while trying to remove file: %s",
+ "ConnectPort": "connecting to: %s:%s",
+ "Disconnected": "disconnected",
+ "DisconnectHost": "disconnecting from: %s",
+ "FTPConnected": "connected: %s",
+ "InvalidFTPOptions": "There was an error when reading FTP options: %s",
+ "FTPNoHostSpecified": "The FTP server URL must include a host name",
+ "FTPNoProtocolSpecified": "The FTP server URL must begin with ftp:// or ftps://",
+ "NoFilesFound": "Could not find any files to upload",
+ "UploadRemoteDir": "uploading files to remote directory: %s",
+ "UploadSucceedMsg": "FTP upload successful %s",
+ "UploadSucceedRes": "FTP upload successful",
+ "UploadFailed": "Ftp Upload failed"
+ },
+ "_buildConfigMapping": {
+ "Default": "2.229.3",
+ "Node20-225": "2.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/task.loc.json b/_generated/FtpUploadV2/task.loc.json
new file mode 100644
index 000000000000..41a1acf4dc07
--- /dev/null
+++ b/_generated/FtpUploadV2/task.loc.json
@@ -0,0 +1,222 @@
+{
+ "id": "6f8c69a5-b023-428e-a125-fccf4efcb929",
+ "name": "FtpUpload",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "author": "Microsoft Corporation",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/ftp-upload",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [],
+ "version": {
+ "Major": 2,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "ms-resource:loc.group.displayName.advanced",
+ "isExpanded": true
+ }
+ ],
+ "inputs": [
+ {
+ "name": "credsType",
+ "aliases": [
+ "credentialsOption"
+ ],
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.credsType",
+ "defaultValue": "serviceEndpoint",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.credsType",
+ "options": {
+ "serviceEndpoint": "FTP service connection",
+ "inputs": "Enter credentials"
+ }
+ },
+ {
+ "name": "serverEndpoint",
+ "type": "connectedService:Generic",
+ "label": "ms-resource:loc.input.label.serverEndpoint",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.serverEndpoint",
+ "visibleRule": "credsType = serviceEndpoint"
+ },
+ {
+ "name": "serverUrl",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.serverUrl",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "username",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.username",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "password",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.password",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "implicitFTPS",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.implicitFTPS",
+ "defaultValue": "false",
+ "required": false
+ },
+ {
+ "name": "rootFolder",
+ "aliases": [
+ "rootDirectory"
+ ],
+ "type": "filePath",
+ "label": "ms-resource:loc.input.label.rootFolder",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.rootFolder"
+ },
+ {
+ "name": "filePatterns",
+ "type": "multiLine",
+ "label": "ms-resource:loc.input.label.filePatterns",
+ "defaultValue": "**",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.filePatterns",
+ "properties": {
+ "resizable": "true",
+ "rows": "4"
+ }
+ },
+ {
+ "name": "remotePath",
+ "aliases": [
+ "remoteDirectory"
+ ],
+ "type": "string",
+ "label": "ms-resource:loc.input.label.remotePath",
+ "defaultValue": "/upload/$(Build.BuildId)/",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.remotePath"
+ },
+ {
+ "name": "enableUtf8",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.enableUtf8",
+ "defaultValue": "false",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.enableUtf8",
+ "groupName": "advanced"
+ },
+ {
+ "name": "clean",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.clean",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.clean",
+ "groupName": "advanced"
+ },
+ {
+ "name": "cleanContents",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.cleanContents",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.cleanContents",
+ "groupName": "advanced",
+ "visibleRule": "clean = false"
+ },
+ {
+ "name": "preservePaths",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.preservePaths",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.preservePaths",
+ "groupName": "advanced"
+ },
+ {
+ "name": "trustSSL",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.trustSSL",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.trustSSL",
+ "groupName": "advanced"
+ },
+ {
+ "name": "customCmds",
+ "type": "multiLine",
+ "label": "ms-resource:loc.input.label.customCmds",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.customCmds",
+ "groupName": "advanced",
+ "properties": {
+ "resizable": "true",
+ "rows": "2"
+ }
+ }
+ ],
+ "execution": {
+ "Node10": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": []
+ }
+ },
+ "messages": {
+ "CleanRemoteDir": "ms-resource:loc.messages.CleanRemoteDir",
+ "CleanRemoteDirContents": "ms-resource:loc.messages.CleanRemoteDirContents",
+ "CleanFileDeleteFail": "ms-resource:loc.messages.CleanFileDeleteFail",
+ "ConnectPort": "ms-resource:loc.messages.ConnectPort",
+ "Disconnected": "ms-resource:loc.messages.Disconnected",
+ "DisconnectHost": "ms-resource:loc.messages.DisconnectHost",
+ "FTPConnected": "ms-resource:loc.messages.FTPConnected",
+ "InvalidFTPOptions": "ms-resource:loc.messages.InvalidFTPOptions",
+ "FTPNoHostSpecified": "ms-resource:loc.messages.FTPNoHostSpecified",
+ "FTPNoProtocolSpecified": "ms-resource:loc.messages.FTPNoProtocolSpecified",
+ "NoFilesFound": "ms-resource:loc.messages.NoFilesFound",
+ "UploadRemoteDir": "ms-resource:loc.messages.UploadRemoteDir",
+ "UploadSucceedMsg": "ms-resource:loc.messages.UploadSucceedMsg",
+ "UploadSucceedRes": "ms-resource:loc.messages.UploadSucceedRes",
+ "UploadFailed": "ms-resource:loc.messages.UploadFailed"
+ },
+ "_buildConfigMapping": {
+ "Default": "2.229.3",
+ "Node20-225": "2.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2/tsconfig.json b/_generated/FtpUploadV2/tsconfig.json
new file mode 100644
index 000000000000..39be0591f39c
--- /dev/null
+++ b/_generated/FtpUploadV2/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs",
+ "skipLibCheck": true,
+ "strict": true
+ }
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/.npmrc b/_generated/FtpUploadV2_Node20/.npmrc
new file mode 100644
index 000000000000..5fca0d518be7
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/.npmrc
@@ -0,0 +1 @@
+scripts-prepend-node-path=true
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..baeff4c43182
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP-Upload",
+ "loc.helpMarkDown": "Lädt Dateien auf einen Remotecomputer mithilfe von FTP (File Transfer Protocol) oder sicher mit FTPS hoch. [Weitere Informationen](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Hiermit werden Dateien per FTP hochgeladen.",
+ "loc.instanceNameFormat": "FTP-Upload: $(rootFolder)",
+ "loc.group.displayName.advanced": "Erweitert",
+ "loc.input.label.credsType": "Authentifizierungsmethode",
+ "loc.input.help.credsType": "Verwenden Sie die FTP-Dienstverbindung, oder geben Sie Anmeldeinformationen ein.",
+ "loc.input.label.serverEndpoint": "FTP-Dienstverbindung",
+ "loc.input.help.serverEndpoint": "Wählen Sie die Dienstverbindung für Ihren FTP-Server aus. Klicken Sie zum Erstellen einer Dienstverbindung auf den Link \"Verwalten\", und erstellen Sie dann eine neue generische Dienstverbindung. Geben Sie die FTP-Server-URL für die Server-URL (z. B. \"ftp://server.example.com\" ) sowie die erforderlichen Anmeldeinformationen ein.
Sichere Verbindungen werden unabhängig vom angegebenen Protokoll (\"ftp://\" oder \"ftps://\" ) immer hergestellt, wenn der Zielserver FTPS unterstützt. Um nur sichere Verbindungen zuzulassen, verwenden Sie das Protokoll \"ftps://\" (z. B. \"ftps://server.example.com\" ). Bei Verbindungen mit Servern ohne FTPS-Unterstützung kommt es zu einem Fehler, wenn \"ftps://\" angegeben wird.",
+ "loc.input.label.serverUrl": "Server-URL",
+ "loc.input.label.username": "Benutzername",
+ "loc.input.label.password": "Kennwort",
+ "loc.input.label.rootFolder": "Stammordner",
+ "loc.input.help.rootFolder": "Der Quellordner, aus dem Dateien hochgeladen werden sollen.",
+ "loc.input.label.filePatterns": "Dateimuster",
+ "loc.input.help.filePatterns": "Dateipfade oder Muster der hochzuladenden Dateien. Unterstützt mehrere Minimatchmuster. [Weitere Informationen](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Remoteverzeichnis",
+ "loc.input.help.remotePath": "Lädt Dateien in dieses Verzeichnis auf dem Remote-FTP-Server hoch.",
+ "loc.input.label.enableUtf8": "UTF-8-Unterstützung aktivieren",
+ "loc.input.help.enableUtf8": "Aktiviert die UTF-8-Unterstützung für die FTP-Verbindung (\"OPTS UTF8 ON\").",
+ "loc.input.label.clean": "Remoteverzeichnis löschen",
+ "loc.input.help.clean": "Löscht das Remoteverzeichnis einschließlich seiner Inhalte vor dem Hochladen.",
+ "loc.input.label.cleanContents": "Inhalte des Remoteverzeichnisses löschen",
+ "loc.input.help.cleanContents": "Löscht vor dem Hochladen rekursiv alle Inhalte aus dem Remoteverzeichnis. Das vorhandene Verzeichnis wird nicht gelöscht. Erwägen Sie zur Leistungsverbesserung stattdessen die Verwendung von \"Remoteverzeichnis löschen\".",
+ "loc.input.label.preservePaths": "Dateipfade beibehalten",
+ "loc.input.help.preservePaths": "Wenn diese Option ausgewählt wird, wird die relative lokale Verzeichnisstruktur unter dem Remoteverzeichnis erneut erstellt, in das Dateien hochgeladen werden. Andernfalls werden Dateien direkt in das Remoteverzeichnis hochgeladen, ohne dass zusätzliche Unterverzeichnisse erstellt werden.
Angenommen, der Quellordner ist \"/home/user/source/\" , und er enthält die Datei \"foo/bar/foobar.txt\" . Das Remoteverzeichnis ist \"/uploads/\" . Wenn diese Option ausgewählt wird, wird die Datei in \"/uploads/foo/bar/foobar.txt\" hochgeladen. Andernfalls wird sie in \"/uploads/foobar.txt\" hochgeladen.",
+ "loc.input.label.trustSSL": "Serverzertifikat vertrauen",
+ "loc.input.help.trustSSL": "Das Auswählen dieser Option führt dazu, dass das SSL-Zertifikat des FTP-Servers mit ftps:// selbst dann als vertrauenswürdig betrachtet wird, wenn es selbstsigniert ist oder nicht von einer Zertifizierungsstelle (CA) überprüft werden kann.",
+ "loc.input.label.customCmds": "FTP-Befehle",
+ "loc.input.help.customCmds": "Optionale FTP-Befehle, die bei der Verbindungsherstellung an den FTP-Remoteserver gesendet werden.",
+ "loc.messages.CleanRemoteDir": "Remoteverzeichnis wird entfernt: %s",
+ "loc.messages.CleanRemoteDirContents": "Remoteverzeichnisinhalte werden entfernt: %s",
+ "loc.messages.CleanFileDeleteFail": "Fehler beim Versuch, die Datei zu entfernen: %s",
+ "loc.messages.ConnectPort": "Verbindung wird hergestellt mit: %s:%s ",
+ "loc.messages.Disconnected": "Getrennt",
+ "loc.messages.DisconnectHost": "Verbindung wird getrennt: %s",
+ "loc.messages.FTPConnected": "Verbunden: %s",
+ "loc.messages.InvalidFTPOptions": "Fehler beim Lesen der FTP-Optionen: %s",
+ "loc.messages.FTPNoHostSpecified": "Die URL des FTP-Servers muss einen Hostnamen enthalten.",
+ "loc.messages.FTPNoProtocolSpecified": "Die URL des FTP-Servers muss mit ftp:// oder ftps:// beginnen.",
+ "loc.messages.NoFilesFound": "Es wurden keine Dateien zum Upload gefunden.",
+ "loc.messages.UploadRemoteDir": "Die Dateien werden in das Remoteverzeichnis hochgeladen: %s",
+ "loc.messages.UploadSucceedMsg": "FTP-Upload erfolgreich: %s",
+ "loc.messages.UploadSucceedRes": "FTP-Upload erfolgreich",
+ "loc.messages.UploadFailed": "Fehler bei FTP-Upload."
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..0a96625d162a
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,48 @@
+{
+ "loc.friendlyName": "FTP upload",
+ "loc.helpMarkDown": "Upload files to a remote machine using the File Transfer Protocol (FTP), or securely with FTPS. [More Information](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Upload files using FTP",
+ "loc.instanceNameFormat": "FTP Upload: $(rootFolder)",
+ "loc.group.displayName.advanced": "Advanced",
+ "loc.input.label.credsType": "Authentication Method",
+ "loc.input.help.credsType": "Use FTP service connection or enter connection credentials.",
+ "loc.input.label.serverEndpoint": "FTP Service Connection",
+ "loc.input.help.serverEndpoint": "Select the service connection for your FTP server. To create one, click the Manage link and create a new Generic service connection, enter the FTP server URL for the server URL, e.g. `ftp://server.example.com` , and required credentials.
Secure connections will always be made regardless of the specified protocol (`ftp://` or `ftps://` ) if the target server supports FTPS. To allow only secure connections, use the `ftps://` protocol, e.g. `ftps://server.example.com` . Connections to servers not supporting FTPS will fail if `ftps://` is specified.",
+ "loc.input.label.serverUrl": "Server URL",
+ "loc.input.label.username": "Username",
+ "loc.input.label.password": "Password",
+ "loc.input.label.implicitFTPS": "Use implicit FTPS",
+ "loc.input.label.rootFolder": "Root folder",
+ "loc.input.help.rootFolder": "The source folder to upload files from.",
+ "loc.input.label.filePatterns": "File patterns",
+ "loc.input.help.filePatterns": "File paths or patterns of the files to upload. Supports multiple lines of minimatch patterns. [More Information](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Remote directory",
+ "loc.input.help.remotePath": "Upload files to this directory on the remote FTP server.",
+ "loc.input.label.enableUtf8": "Enable UTF8 support",
+ "loc.input.help.enableUtf8": "Enables UTF-8 support for the FTP connection ('OPTS UTF8 ON').",
+ "loc.input.label.clean": "Delete remote directory",
+ "loc.input.help.clean": "Delete the remote directory including its contents before uploading.",
+ "loc.input.label.cleanContents": "Clear remote directory contents",
+ "loc.input.help.cleanContents": "Recursively delete all contents of the remote directory before uploading. The existing directory will not be deleted. For better performance, consider using `Delete remote directory` instead.",
+ "loc.input.label.preservePaths": "Preserve file paths",
+ "loc.input.help.preservePaths": "If selected, the relative local directory structure is recreated under the remote directory where files are uploaded. Otherwise, files are uploaded directly to the remote directory without creating additional subdirectories.
For example, suppose your source folder is: `/home/user/source/` and contains the file: `foo/bar/foobar.txt` , and your remote directory is: `/uploads/` . If selected, the file is uploaded to: `/uploads/foo/bar/foobar.txt` . Otherwise, to: `/uploads/foobar.txt` .",
+ "loc.input.label.trustSSL": "Trust server certificate",
+ "loc.input.help.trustSSL": "Selecting this option results in the FTP server's SSL certificate being trusted with ftps://, even if it is self-signed or cannot be validated by a Certificate Authority (CA).",
+ "loc.input.label.customCmds": "FTP Commands",
+ "loc.input.help.customCmds": "Optional FTP Commands that will be sent to the remote FTP server upon connection.",
+ "loc.messages.CleanRemoteDir": "removing remote directory: %s",
+ "loc.messages.CleanRemoteDirContents": "removing remote directory contents: %s",
+ "loc.messages.CleanFileDeleteFail": "an error occurred while trying to remove file: %s",
+ "loc.messages.ConnectPort": "connecting to: %s:%s",
+ "loc.messages.Disconnected": "disconnected",
+ "loc.messages.DisconnectHost": "disconnecting from: %s",
+ "loc.messages.FTPConnected": "connected: %s",
+ "loc.messages.InvalidFTPOptions": "There was an error when reading FTP options: %s",
+ "loc.messages.FTPNoHostSpecified": "The FTP server URL must include a host name",
+ "loc.messages.FTPNoProtocolSpecified": "The FTP server URL must begin with ftp:// or ftps://",
+ "loc.messages.NoFilesFound": "Could not find any files to upload",
+ "loc.messages.UploadRemoteDir": "uploading files to remote directory: %s",
+ "loc.messages.UploadSucceedMsg": "FTP upload successful %s",
+ "loc.messages.UploadSucceedRes": "FTP upload successful",
+ "loc.messages.UploadFailed": "Ftp Upload failed"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..767dc0406b72
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "Carga por FTP",
+ "loc.helpMarkDown": "Carga los archivos en una máquina remota usando el protocolo de transferencia de archivos (FTP) o de forma segura con FTPS. [Más información](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Cargar archivos con FTP",
+ "loc.instanceNameFormat": "Carga por FTP: $(rootFolder)",
+ "loc.group.displayName.advanced": "Avanzado",
+ "loc.input.label.credsType": "Método de autenticación",
+ "loc.input.help.credsType": "Use la conexión del servicio FTP o especifique credenciales para la conexión.",
+ "loc.input.label.serverEndpoint": "Conexión del servicio FTP",
+ "loc.input.help.serverEndpoint": "Seleccione el punto de conexión de servicio del servidor FTP. Para crear uno, haga clic en el vínculo Administrar y cree un nuevo punto de conexión de servicio genérico, escriba la dirección URL del servidor FTP (por ejemplo, \"ftp://servidor.ejemplo.com\" ) y las credenciales necesarias.
Siempre se usarán conexiones seguras, independientemente del protocolo especificado (\"ftp://\" o \"ftps://\" ) si el servidor de destino admite FTPS. Para permitir solo conexiones seguras, use el protocolo \"ftps://\" (por ejemplo, \"ftps://servidor.ejemplo.com\" ). Las conexiones a los servidores que no admiten FTPS dan error si se especifica \"ftps://\" .",
+ "loc.input.label.serverUrl": "Dirección URL del servidor",
+ "loc.input.label.username": "Nombre de usuario",
+ "loc.input.label.password": "Contraseña",
+ "loc.input.label.rootFolder": "Carpeta raíz",
+ "loc.input.help.rootFolder": "Carpeta de origen de donde se cargan los archivos.",
+ "loc.input.label.filePatterns": "Patrones de archivo",
+ "loc.input.help.filePatterns": "Rutas de acceso de archivo o patrones de los archivos que se deben cargar. Admite varias líneas de patrones de minimatch. [Más información](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Directorio remoto",
+ "loc.input.help.remotePath": "Carga los archivos en este directorio en el servidor FTP remoto.",
+ "loc.input.label.enableUtf8": "Habilitar la compatibilidad con UTF8",
+ "loc.input.help.enableUtf8": "Habilita la compatibilidad con UTF-8 para la conexión FTP (\"OPTS UTF8 ON\").",
+ "loc.input.label.clean": "Eliminar el directorio remoto",
+ "loc.input.help.clean": "Elimine el directorio remoto, incluido su contenido, antes de cargar.",
+ "loc.input.label.cleanContents": "Borrar el contenido del directorio remoto",
+ "loc.input.help.cleanContents": "Elimine de forma recursiva todo el contenido del directorio remoto antes de cargar. El directorio existente no se elimina. Para mejorar el rendimiento, considere la posibilidad de usar \"Eliminar el directorio remoto\" en su lugar.",
+ "loc.input.label.preservePaths": "Mantener las rutas de acceso de los archivos",
+ "loc.input.help.preservePaths": "Cuando se selecciona, la estructura de directorios local relativa se vuelve a crear en el directorio remoto donde se cargan los archivos. De lo contrario, los archivos se cargan directamente en el directorio remoto sin crear subdirectorios adicionales.
Por ejemplo, image que su carpeta es `/home/user/source/` y contiene el archivo `foo/bar/foobar.txt` , y el directorio remoto es `/uploads/` . Si selecciona esta opción, el archivo se carga en `/uploads/foo/bar/foobar.txt` . De lo contrario, se carga en `/uploads/foobar.txt` .",
+ "loc.input.label.trustSSL": "Confiar en el certificado del servidor",
+ "loc.input.help.trustSSL": "Cuando se selecciona esta opción, se confía en el certificado SSL del servidor FTP con ftps://, incluso si es autofirmado o no lo puede validar una entidad de certificación (CA).",
+ "loc.input.label.customCmds": "Comandos FTP",
+ "loc.input.help.customCmds": "Comandos FTP opcionales que se enviarán al servidor FTP remoto al conectarse.",
+ "loc.messages.CleanRemoteDir": "Quitando el directorio remoto: %s",
+ "loc.messages.CleanRemoteDirContents": "Quitando el contenido del directorio remoto: %s",
+ "loc.messages.CleanFileDeleteFail": "Error al intentar quitar el archivo: %s",
+ "loc.messages.ConnectPort": "conectándose a: %s:%s",
+ "loc.messages.Disconnected": "desconectado",
+ "loc.messages.DisconnectHost": "desconectándose de: %s",
+ "loc.messages.FTPConnected": "conectado: %s",
+ "loc.messages.InvalidFTPOptions": "Se ha producido un error al leer las opciones de FTP: %s",
+ "loc.messages.FTPNoHostSpecified": "La dirección URL del servidor FTP debe incluir un nombre de host",
+ "loc.messages.FTPNoProtocolSpecified": "La dirección URL del servidor FTP debe comenzar con ftp:// o ftps://",
+ "loc.messages.NoFilesFound": "No se encontró ningún archivo para cargar.",
+ "loc.messages.UploadRemoteDir": "cargando archivos al directorio remoto: %s",
+ "loc.messages.UploadSucceedMsg": "La carga por FTP de %s se realizó correctamente",
+ "loc.messages.UploadSucceedRes": "Carga por FTP correcta",
+ "loc.messages.UploadFailed": "Error en la carga por FTP"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..1bb46724c141
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "Chargement FTP",
+ "loc.helpMarkDown": "Chargez les fichiers vers une machine distante par FTP (File Transfer Protocol), ou de manière sécurisée par FTPS. [Plus d'informations](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Charger des fichiers via FTP",
+ "loc.instanceNameFormat": "Chargement FTP : $(rootFolder)",
+ "loc.group.displayName.advanced": "Avancé",
+ "loc.input.label.credsType": "Méthode d'authentification",
+ "loc.input.help.credsType": "Utilisez la connexion de service FTP, ou entrez les informations d'identification de connexion.",
+ "loc.input.label.serverEndpoint": "Connexion de service FTP",
+ "loc.input.help.serverEndpoint": "Sélectionnez la connexion de service de votre serveur FTP. Pour en créer une, cliquez sur le lien Gérer, puis créez une connexion de service générique, entrez l'URL du serveur FTP, par exemple 'ftp://server.example.com' , ainsi que les informations d'identification nécessaires.
Quel que soit le protocole spécifié, ('ftp://' ou 'ftps://' ), la sécurisation des connexions est assurée si le serveur cible prend en charge le protocole FTPS. Pour autoriser uniquement les connexions sécurisées, utilisez le protocole 'ftps://' , par exemple 'ftps://server.example.com' . Si 'ftps://' est spécifié, les connexions aux serveurs qui ne prennent pas en charge FTPS ne sont pas établies.",
+ "loc.input.label.serverUrl": "URL du serveur",
+ "loc.input.label.username": "Nom d'utilisateur",
+ "loc.input.label.password": "Mot de passe",
+ "loc.input.label.rootFolder": "Dossier racine",
+ "loc.input.help.rootFolder": "Dossier source du chargement des fichiers.",
+ "loc.input.label.filePatterns": "Modèles de fichiers",
+ "loc.input.help.filePatterns": "Chemins de fichiers ou modèles des fichiers à charger. Prend en charge plusieurs lignes de modèles minimatch. [Plus d'informations](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Répertoire distant",
+ "loc.input.help.remotePath": "Chargez les fichiers vers ce répertoire sur le serveur FTP distant.",
+ "loc.input.label.enableUtf8": "Activer la prise en charge d'UTF8",
+ "loc.input.help.enableUtf8": "Active la prise en charge d'UTF-8 pour la connexion FTP ('OPTS UTF8 ON').",
+ "loc.input.label.clean": "Supprimer le répertoire distant",
+ "loc.input.help.clean": "Supprimez le répertoire distant, notamment son contenu, avant le chargement.",
+ "loc.input.label.cleanContents": "Effacer le contenu du répertoire distant",
+ "loc.input.help.cleanContents": "Supprimez de manière récursive la totalité du contenu du répertoire distant avant le chargement. Le répertoire existant ne sera pas supprimé. Pour un meilleur niveau de performance, pensez à utiliser 'Supprimer le répertoire distant' à la place.",
+ "loc.input.label.preservePaths": "Conserver les chemins de fichiers",
+ "loc.input.help.preservePaths": "Si l'option est sélectionnée, la structure de répertoire locale relative est recréée sous le répertoire distant où les fichiers sont chargés. Sinon, les fichiers sont chargés directement sur le répertoire distant sans création de sous-répertoires supplémentaires.
Par exemple, votre dossier source est '/home/user/source/' , il contient le fichier 'foo/bar/foobar.txt' , et votre répertoire distant est '/uploads/' . Si l'option est sélectionnée, le fichier est chargé vers '/uploads/foo/bar/foobar.txt' . Sinon, il est chargé vers '/uploads/foobar.txt' .",
+ "loc.input.label.trustSSL": "Faire confiance au certificat de serveur",
+ "loc.input.help.trustSSL": "Si cette option est sélectionnée, le certificat SSL du serveur FTP est approuvé avec ftps://, même s'il est auto-signé ou même s'il ne peut pas être validé par une autorité de certification.",
+ "loc.input.label.customCmds": "Commandes FTP",
+ "loc.input.help.customCmds": "Commandes FTP facultatives qui sont envoyées au serveur FTP distant au moment de la connexion.",
+ "loc.messages.CleanRemoteDir": "suppression du répertoire distant : %s",
+ "loc.messages.CleanRemoteDirContents": "suppression du contenu du répertoire distant : %s",
+ "loc.messages.CleanFileDeleteFail": "une erreur s'est produite durant la suppression du fichier : %s",
+ "loc.messages.ConnectPort": "Connexion à : %s:%s",
+ "loc.messages.Disconnected": "déconnecté",
+ "loc.messages.DisconnectHost": "déconnexion de %s",
+ "loc.messages.FTPConnected": "connecté : %s",
+ "loc.messages.InvalidFTPOptions": "Une erreur s’est produite lors de la lecture des options de ftP : %s",
+ "loc.messages.FTPNoHostSpecified": "L'URL du serveur FTP doit inclure un nom d'hôte",
+ "loc.messages.FTPNoProtocolSpecified": "L'URL du serveur FTP doit commencer par ftp:// ou ftps://",
+ "loc.messages.NoFilesFound": "Fichiers à charger introuvables",
+ "loc.messages.UploadRemoteDir": "téléchargement de fichiers sur le répertoire distant : %s",
+ "loc.messages.UploadSucceedMsg": "Téléchargement FTP réussi %s",
+ "loc.messages.UploadSucceedRes": "Téléchargement FTP réussi",
+ "loc.messages.UploadFailed": "Échec du chargement FTP"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..592dda67f48a
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "Caricamento FTP",
+ "loc.helpMarkDown": "Carica i file in un computer remoto usando il protocollo FTP (File Transfer Protocol) oppure in modo protetto con FTPS. [Altre informazioni](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Consente di caricare file tramite FTP",
+ "loc.instanceNameFormat": "Caricamento FTP: $(rootFolder)",
+ "loc.group.displayName.advanced": "Avanzate",
+ "loc.input.label.credsType": "Metodo di autenticazione",
+ "loc.input.help.credsType": "Consente di usare la connessione al servizio FTP o di immettere le credenziali di connessione.",
+ "loc.input.label.serverEndpoint": "Connessione al servizio FTP",
+ "loc.input.help.serverEndpoint": "Consente di selezionare la connessione al servizio per il server FTP. Per crearne una, fare clic sul collegamento Gestisci e creare una nuova connessione al servizio generica, immettere l'URL del server FTP per l'URL del server, ad esempio `ftp://server.example.com` , nonché le credenziali richieste.
Le connessioni sicure verranno sempre stabilite indipendentemente dal protocollo specificato (`ftp://` o `ftps://` ) se il server di destinazione supporta FTPS. Per consentire solo le connessioni sicure, usare il protocollo `ftps://` , ad esempio `ftps://server.example.com` . Se si specifica `ftps://` , le connessioni a server che non supportano FTPS non riusciranno.",
+ "loc.input.label.serverUrl": "URL del server",
+ "loc.input.label.username": "Nome utente",
+ "loc.input.label.password": "Password",
+ "loc.input.label.rootFolder": "Cartella radice",
+ "loc.input.help.rootFolder": "Cartella di origine da cui caricare i file.",
+ "loc.input.label.filePatterns": "Criteri dei file",
+ "loc.input.help.filePatterns": "Criteri o percorsi dei file da caricare. Sono supportate più righe di criteri di corrispondenza minima. [Altre informazioni](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Directory remota",
+ "loc.input.help.remotePath": "Directory in cui vengono caricati i file nel server FTP remoto.",
+ "loc.input.label.enableUtf8": "Abilita supporto di UTF8",
+ "loc.input.help.enableUtf8": "Abilita il supporto di UTF-8 per la connessione FTP ('OPTS UTF8 ON').",
+ "loc.input.label.clean": "Elimina la directory remota",
+ "loc.input.help.clean": "Elimina la directory remota, incluso il relativo contenuto, prima del caricamento.",
+ "loc.input.label.cleanContents": "Cancella il contenuto della directory remota",
+ "loc.input.help.cleanContents": "Elimina in modo ricorsivo tutto il contenuto della directory remota prima del caricamento. La directory esistente non verrà eliminata. Per prestazioni ottimali, provare a usare `Elimina la directory remota`.",
+ "loc.input.label.preservePaths": "Mantieni i percorsi di file",
+ "loc.input.help.preservePaths": "Se l'opzione è selezionata, la struttura di directory locale relativa viene ricreata nella directory remota in cui vengono caricati i file. In caso contrario, i file vengono caricati direttamente nella directory remota senza creare sottodirectory aggiuntive.
Ad esempio, si supponga che la cartella di origine sia `/home/user/source/` e contenga il file `foo/bar/foobar.txt` e che la directory remota sia `/uploads/` . Se l'opzione è selezionata, il file verrà caricato in `/uploads/foo/bar/foobar.txt` ; in caso contrario, verrà caricato in `/uploads/foobar.txt` .",
+ "loc.input.label.trustSSL": "Considera attendibile il certificato del server",
+ "loc.input.help.trustSSL": "Se si seleziona questa opzione, il certificato SSL del server FTP verrà considerato attendibile con ftps://, anche se è auto-firmato o non può essere convalidato da un'Autorità di certificazione (CA).",
+ "loc.input.label.customCmds": "Comandi FTP",
+ "loc.input.help.customCmds": "Comandi FTP facoltativi che verranno inviati al server FTP remoto durante la connessione.",
+ "loc.messages.CleanRemoteDir": "rimozione della directory remota: %s",
+ "loc.messages.CleanRemoteDirContents": "rimozione del contenuto della directory remota: %s",
+ "loc.messages.CleanFileDeleteFail": "si è verificato un errore durante il tentativo di rimuovere il file: %s",
+ "loc.messages.ConnectPort": "connessione a: %s:%s",
+ "loc.messages.Disconnected": "disconnesso",
+ "loc.messages.DisconnectHost": "disconnessione da: %s",
+ "loc.messages.FTPConnected": "connessione stabilita: %s",
+ "loc.messages.InvalidFTPOptions": "Si è verificato un errore durante la lettura delle opzioni FTP: %s",
+ "loc.messages.FTPNoHostSpecified": "L'URL del server FTP deve includere un nome host",
+ "loc.messages.FTPNoProtocolSpecified": "L'URL del server FTP deve iniziare con ftp:// o ftps://",
+ "loc.messages.NoFilesFound": "Non è stato possibile trovare file da caricare",
+ "loc.messages.UploadRemoteDir": "caricamento di file nella directory remota: %s",
+ "loc.messages.UploadSucceedMsg": "Caricamento FTP riuscito: %s",
+ "loc.messages.UploadSucceedRes": "Caricamento FTP riuscito",
+ "loc.messages.UploadFailed": "Caricamento tramite FTP non riuscito"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..5895d2238495
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP アップロード",
+ "loc.helpMarkDown": "ファイル転送プロトコル (FTP) を使用して、または FTPS でセキュリティ保護して、リモート コンピューターにファイルをアップロードします。[詳細情報](http://go.microsoft.com/fwlink/?LinkId=809084)。",
+ "loc.description": "FTP を使用してファイルをアップロードします",
+ "loc.instanceNameFormat": "FTP アップロード: $(rootFolder)",
+ "loc.group.displayName.advanced": "詳細設定",
+ "loc.input.label.credsType": "認証方法",
+ "loc.input.help.credsType": "FTP サービス接続を使うか、接続の資格情報を入力します。",
+ "loc.input.label.serverEndpoint": "FTP サービス接続",
+ "loc.input.help.serverEndpoint": "FTP サーバーのサービス エンドポイントを選択します。サービス エンドポイントを作成するには、[管理] リンクをクリックし、新しい汎用サービス エンドポイントを作成し、サーバー URL の FTP サーバー URL (例: `ftp://server.example.com` ) と必要な資格情報を入力します。
ターゲット サーバーが FTPS をサポートしている場合には、指定したプロトコル (`ftp://` または `ftps://` ) に関係なくセキュリティで保護された接続が常に作成されます。セキュリティで保護された接続のみを許可する場合には `ftps://` プロトコル (例: `ftps://server.example.com` ) を使用します。`ftps://` を指定すると、FTPS をサポートしていないサーバーへの接続は失敗します。",
+ "loc.input.label.serverUrl": "サーバーの URL",
+ "loc.input.label.username": "ユーザー名",
+ "loc.input.label.password": "パスワード",
+ "loc.input.label.rootFolder": "ルート フォルダー",
+ "loc.input.help.rootFolder": "ファイルのアップロード元のソース フォルダー。",
+ "loc.input.label.filePatterns": "ファイル パターン",
+ "loc.input.help.filePatterns": "アーカイブするファイルのファイル パスまたはパターン。複数行の minimatch パターンをサポートします。[詳細情報](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "リモート ディレクトリ",
+ "loc.input.help.remotePath": "リモート FTP サーバー上のこのディレクトリにファイルをアップロードします。",
+ "loc.input.label.enableUtf8": "UTF-8 サポートを有効にする",
+ "loc.input.help.enableUtf8": "FTP 接続の UTF-8 サポートを有効にします ('OPTS UTF8 ON')。",
+ "loc.input.label.clean": "リモート ディレクトリの削除",
+ "loc.input.help.clean": "アップロードする前に、リモート ディレクトリをコンテンツも含めて削除します。",
+ "loc.input.label.cleanContents": "リモート ディレクトリ コンテンツのクリア",
+ "loc.input.help.cleanContents": "アップロードの前に、リモート ディレクトリのすべてのコンテンツを再帰的に削除します。既存のディレクトリは、削除されません。パフォーマンス向上のために、代わりに [リモート ディレクトリの削除] の使用をご検討ください。",
+ "loc.input.label.preservePaths": "ファイル パスを保持",
+ "loc.input.help.preservePaths": "選択すると、ファイルのアップロード先のリモート ディレクトリの下に、相対ローカル ディレクトリ構造が再作成されます。選択しない場合には、ファイルは、サブディレクトリが作成されることなくリモート ディレクトリに直接アップロードされます。
たとえば、ソース フォルダーが `/home/user/source/` で、ファイル `foo/bar/foobar.txt` が含まれ、リモート ディレクトリが `/uploads/` であるとします。 選択すると、ファイルは `/uploads/foo/bar/foobar.txt` にアップロードされます。選択しないと、`/uploads/foobar.txt` にアップロードされます。",
+ "loc.input.label.trustSSL": "サーバー証明書を信頼する",
+ "loc.input.help.trustSSL": "このオプションを選択すると、FTP サーバーの SSL 証明書が、自己署名されている場合や証明書機関 (CA) によって検証できない場合であっても ftps:// によって信頼できるようになります。",
+ "loc.input.label.customCmds": "FTP コマンド",
+ "loc.input.help.customCmds": "接続時にリモート FTP サーバーに送信されるオプションの FTP コマンドです。",
+ "loc.messages.CleanRemoteDir": "リモート ディレクトリを削除しています: %s",
+ "loc.messages.CleanRemoteDirContents": "リモート ディレクトリのコンテンツを削除しています: %s",
+ "loc.messages.CleanFileDeleteFail": "ファイルを削除しようとしている間にエラーが発生しました: %s",
+ "loc.messages.ConnectPort": "次に接続しています: %s:%s",
+ "loc.messages.Disconnected": "切断されました",
+ "loc.messages.DisconnectHost": "次から切断しています: %s",
+ "loc.messages.FTPConnected": "接続されました: %s",
+ "loc.messages.InvalidFTPOptions": "FTP オプションの読み取り中にエラーが発生しました: %s",
+ "loc.messages.FTPNoHostSpecified": "FTP サーバーの URL には、ホスト名を含める必要があります",
+ "loc.messages.FTPNoProtocolSpecified": "FTP サーバーの URL は、ftp:// または ftps:// で始める必要があります",
+ "loc.messages.NoFilesFound": "アップロード対象のファイルが見つかりませんでした",
+ "loc.messages.UploadRemoteDir": "リモート ディレクトリにファイルをアップロードしています: %s",
+ "loc.messages.UploadSucceedMsg": "FTP が正常にアップロードされました %s",
+ "loc.messages.UploadSucceedRes": "FTP が正常にアップロードされました",
+ "loc.messages.UploadFailed": "FTP アップロードに失敗しました"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..971cb146e2e6
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP 업로드",
+ "loc.helpMarkDown": "FTP(파일 전송 프로토콜)를 사용하거나 FTPS를 사용하여 안전하게 파일을 원격 컴퓨터에 업로드합니다. [자세한 정보](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "FTP를 사용하여 파일을 업로드합니다.",
+ "loc.instanceNameFormat": "FTP 업로드: $(rootFolder)",
+ "loc.group.displayName.advanced": "고급",
+ "loc.input.label.credsType": "인증 방법",
+ "loc.input.help.credsType": "FTP 서비스 연결을 사용하거나 연결 자격 증명을 입력합니다.",
+ "loc.input.label.serverEndpoint": "FTP 서비스 연결",
+ "loc.input.help.serverEndpoint": "FTP 서버의 서비스 연결을 선택합니다. 서비스 연결을 만들려면 [관리] 링크를 클릭하고 새 일반 서비스 연결을 만든 후 서버 URL의 FTP 서버 URL(예: 'ftp://server.example.com' ) 및 필요한 자격 증명을 입력합니다.
대상 서버가 FTPS를 지원하는 경우 지정된 프로토콜('ftp://' 또는 'ftps://' )과 관계없이 항상 보안 연결이 만들어집니다. 보안 연결만 허용하려면 'ftps://' 프로토콜(예: 'ftps://server.example.com' )을 사용합니다. 'ftps://' 가 지정된 경우 FTPS를 지원하지 않는 서버에 연결할 수 없습니다.",
+ "loc.input.label.serverUrl": "서버 URL",
+ "loc.input.label.username": "사용자 이름",
+ "loc.input.label.password": "암호",
+ "loc.input.label.rootFolder": "루트 폴더",
+ "loc.input.help.rootFolder": "파일을 업로드할 소스 폴더입니다.",
+ "loc.input.label.filePatterns": "파일 패턴",
+ "loc.input.help.filePatterns": "업로드할 파일의 파일 경로 또는 패턴입니다. 여러 줄로 된 minimatch 패턴을 지원합니다. [자세한 정보](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "원격 디렉터리",
+ "loc.input.help.remotePath": "파일을 원격 FTP 서버의 이 디렉터리에 업로드합니다.",
+ "loc.input.label.enableUtf8": "UTF8 지원 사용",
+ "loc.input.help.enableUtf8": "FTP 연결에 대해 UTF-8 지원을 사용합니다('OPTS UTF8 ON').",
+ "loc.input.label.clean": "원격 디렉터리 삭제",
+ "loc.input.help.clean": "업로드 전에 해당 콘텐츠를 포함하여 원격 디렉터리를 삭제합니다.",
+ "loc.input.label.cleanContents": "원격 디렉터리 콘텐츠 지우기",
+ "loc.input.help.cleanContents": "업로드 전에 원격 디렉터리의 모든 콘텐츠를 재귀적으로 삭제합니다. 기존 디렉터리는 삭제되지 않습니다. 성능을 향상하려면 '원격 디렉터리 삭제'를 대신 사용하는 것이 좋습니다.",
+ "loc.input.label.preservePaths": "파일 경로 유지",
+ "loc.input.help.preservePaths": "선택하는 경우 파일이 업로드되는 원격 디렉터리 아래에 상대 로컬 디렉터리 구조가 다시 만들어집니다. 선택하지 않으면 추가 하위 디렉터리가 만들어지지 않고 파일이 원격 디렉터리에 직접 업로드됩니다.
예를 들어 소스 폴더가 `/home/user/source/` 이고 `foo/bar/foobar.txt` 파일을 포함하고 있으며, 원격 디렉터리는 `/uploads/` 라고 가정합니다. 선택하는 경우 파일은 `/uploads/foo/bar/foobar.txt` 에 업로드됩니다. 선택하지 않으면 `/uploads/foobar.txt` 에 업로드됩니다.",
+ "loc.input.label.trustSSL": "서버 인증서 신뢰",
+ "loc.input.help.trustSSL": "이 옵션을 선택하면 FTP 서버의 SSL 인증서가 자체 서명되거나 CA(인증 기관)에서 그 유효성을 검사할 수 없더라도 해당 인증서가 ftps://로 신뢰됩니다.",
+ "loc.input.label.customCmds": "FTP 명령",
+ "loc.input.help.customCmds": "연결 시 원격 FTP 서버에 전송되는 선택적 FTP 명령입니다.",
+ "loc.messages.CleanRemoteDir": "원격 디렉터리를 제거하는 중: %s",
+ "loc.messages.CleanRemoteDirContents": "원격 디렉터리 콘텐츠를 제거하는 중: %s",
+ "loc.messages.CleanFileDeleteFail": "파일을 제거하는 중 오류 발생: %s",
+ "loc.messages.ConnectPort": "%s:%s에 연결하는 중입니다.",
+ "loc.messages.Disconnected": "연결 끊김",
+ "loc.messages.DisconnectHost": "%s에서 연결을 끊는 중입니다.",
+ "loc.messages.FTPConnected": "%s이(가) 연결되었습니다.",
+ "loc.messages.InvalidFTPOptions": "FTP 옵션을 읽는 동안 오류가 발생했습니다. %s",
+ "loc.messages.FTPNoHostSpecified": "FTP 서버 URL은 호스트 이름을 포함해야 합니다.",
+ "loc.messages.FTPNoProtocolSpecified": "FTP 서버 URL은 ftp:// 또는 ftps://로 시작해야 합니다.",
+ "loc.messages.NoFilesFound": "언로드할 파일을 찾을 수 없습니다.",
+ "loc.messages.UploadRemoteDir": "파일을 원격 디렉터리로 업로드하는 중입니다. %s",
+ "loc.messages.UploadSucceedMsg": "FTP 업로드 성공 %s",
+ "loc.messages.UploadSucceedRes": "FTP 업로드 성공",
+ "loc.messages.UploadFailed": "FTP 업로드에 실패했습니다."
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..7300365fe28e
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "Отправка по FTP",
+ "loc.helpMarkDown": "Передача файлов на удаленный компьютер по протоколу FTP или защищенному протоколу FTPS. [Дополнительные сведения](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "loc.description": "Отправка файлов по FTP",
+ "loc.instanceNameFormat": "Отправка по FTP: $(rootFolder)",
+ "loc.group.displayName.advanced": "Дополнительно",
+ "loc.input.label.credsType": "Способ проверки подлинности",
+ "loc.input.help.credsType": "Используйте подключение к службе FTP или введите учетные данные подключения.",
+ "loc.input.label.serverEndpoint": "Подключение к службе FTP",
+ "loc.input.help.serverEndpoint": "Выберите подключение к службе для FTP-сервера. Чтобы создать подключение, щелкните ссылку \"Управление\" и создайте универсальное подключение к службе, введите URL-адрес FTP-сервера в поле \"URL-адрес сервера\" (например, ftp://server.example.com ) и необходимые учетные данные.
Если конечный сервер поддерживает FTPS, всегда будут устанавливаться безопасные подключения независимо от указанного протокола (ftp:// или ftps:// ). Чтобы разрешить только безопасные подключения, используйте протокол ftps:// , например ftps://server.example.com . Если указан протокол ftps:// , подключения к серверам, не поддерживающим FTPS, будут завершаться ошибкой.",
+ "loc.input.label.serverUrl": "URL-адрес сервера",
+ "loc.input.label.username": "Имя пользователя",
+ "loc.input.label.password": "Пароль",
+ "loc.input.label.rootFolder": "Корневая папка",
+ "loc.input.help.rootFolder": "Исходная папка, из которой выполняется отправка файлов.",
+ "loc.input.label.filePatterns": "Шаблоны файлов",
+ "loc.input.help.filePatterns": "Пути к файлам или шаблоны файлов для отправки. Поддерживает несколько строк шаблонов minimatch. [Подробнее...](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "Удаленный каталог",
+ "loc.input.help.remotePath": "Отправлять файлы в этот каталог на удаленном FTP-сервере.",
+ "loc.input.label.enableUtf8": "Включить поддержку UTF8",
+ "loc.input.help.enableUtf8": "Включает поддержку UTF-8 для FTP-подключения (OPTS UTF8 ON).",
+ "loc.input.label.clean": "Удалить удаленный каталог",
+ "loc.input.help.clean": "Удалить удаленный каталог, включая его содержимое, перед отправкой.",
+ "loc.input.label.cleanContents": "Очистить содержимое удаленного каталога",
+ "loc.input.help.cleanContents": "Рекурсивно удалить все содержимое удаленного каталога перед отправкой. Существующий каталог не удаляется. Для повышения производительности используйте вместо этого функцию \"Удалить удаленный каталог\".",
+ "loc.input.label.preservePaths": "Сохранять пути к файлам",
+ "loc.input.help.preservePaths": "Если этот флажок установлен, структура относительного локального каталога пересоздается в удаленном каталоге, в который отправляются файлы. В противном случае файлы отправляются напрямую в удаленный каталог без создания дополнительных подкаталогов.
Предположим, ваша исходная папка — /home/user/source/ , которая содержит файл foo/bar/foobar.txt , а удаленный каталог — /uploads/ . Если флажок установлен, файл отправляется в папку /uploads/foo/bar/foobar.txt . В противном случае он отправляется в папку /uploads/foobar.txt .",
+ "loc.input.label.trustSSL": "Доверять сертификату сервера",
+ "loc.input.help.trustSSL": "При выборе этого параметра SSL-сертификат FTP-сервера становится доверенным для ftps://, даже если он является самозаверяющим или центр сертификации не может подтвердить его подлинность.",
+ "loc.input.label.customCmds": "Команды FTP",
+ "loc.input.help.customCmds": "Необязательные команды FTP, которые будут отправлены удаленному серверу FTP при подключении.",
+ "loc.messages.CleanRemoteDir": "удаляется удаленный каталог: %s",
+ "loc.messages.CleanRemoteDirContents": "удаляется содержимое удаленного каталога: %s",
+ "loc.messages.CleanFileDeleteFail": "произошла ошибка при удалении файла: %s",
+ "loc.messages.ConnectPort": "подключено к: %s:%s",
+ "loc.messages.Disconnected": "отключено",
+ "loc.messages.DisconnectHost": "отключение от: %s",
+ "loc.messages.FTPConnected": "подключено: %s",
+ "loc.messages.InvalidFTPOptions": "Произошла ошибка при чтении параметров FTP: %s",
+ "loc.messages.FTPNoHostSpecified": "В URL-адресе FTP-сервера должно быть указано имя узла.",
+ "loc.messages.FTPNoProtocolSpecified": "URL-адрес FTP-сервера должен начинаться с \"ftp://\" или \"ftps://\"",
+ "loc.messages.NoFilesFound": "Не удалось найти файлы для отправки",
+ "loc.messages.UploadRemoteDir": "отправка файлов в удаленный каталог: %s",
+ "loc.messages.UploadSucceedMsg": "Отправка по FTP успешно завершена: %s",
+ "loc.messages.UploadSucceedRes": "Отправка по FTP успешно завершена.",
+ "loc.messages.UploadFailed": "Не удалось отправить по FTP"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..f97312549302
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP 上传",
+ "loc.helpMarkDown": "使用文件传输协议(FTP)将文件上传到远程计算机,或使用 FTPS 安全上传。[详细信息](http://go.microsoft.com/fwlink/?LinkId=809084)。",
+ "loc.description": "使用 FTP 上传文件",
+ "loc.instanceNameFormat": "FTP 上传: $(rootFolder)",
+ "loc.group.displayName.advanced": "高级",
+ "loc.input.label.credsType": "身份验证方法",
+ "loc.input.help.credsType": "使用 FTP 服务连接或输入连接凭据。",
+ "loc.input.label.serverEndpoint": "FTP 服务连接",
+ "loc.input.help.serverEndpoint": "选择 FTP 服务器的服务连接。若要创建一个,可单击管理链接并创建新的通用服务连接,为服务器 URL 输入 FTP 服务器 URL,例如,\"ftp://server.example.com\" ,以及所需的凭据。
如果目标服务器支持 FTPS,无论指定了什么协议,都会建立安全连接(\"ftp://\" 或 \"ftps://\" )。若要仅允许安全连接,请使用 \"ftps://\" 协议,例如,\"ftps://server.example.com\" 。如果指定了 \"ftps://\" ,则连接不支持 FTPS 的服务器将失败。",
+ "loc.input.label.serverUrl": "服务器 URL",
+ "loc.input.label.username": "用户名",
+ "loc.input.label.password": "密码",
+ "loc.input.label.rootFolder": "根文件夹",
+ "loc.input.help.rootFolder": "要上传其中文件的源文件夹。",
+ "loc.input.label.filePatterns": "文件模式",
+ "loc.input.help.filePatterns": "要上传的文件的文件路径或模式。支持多行最小匹配模式。[详细信息](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "远程目录",
+ "loc.input.help.remotePath": "将文件上传到远程 FTP 服务器上的该目录中。",
+ "loc.input.label.enableUtf8": "启用 UTF8 支持",
+ "loc.input.help.enableUtf8": "为 FTP 连接启用 UTF-8 支持(\"OPTS UTF8 ON\")。",
+ "loc.input.label.clean": "删除远程目录",
+ "loc.input.help.clean": "上传前,请删除远程目录及其内容。",
+ "loc.input.label.cleanContents": "清除远程目录内容",
+ "loc.input.help.cleanContents": "上传前,请以递归方式删除所有远程目录的内容。不会删除现有目录。要提高性能,请考虑改用“删除远程目录”。",
+ "loc.input.label.preservePaths": "保留文件路径",
+ "loc.input.help.preservePaths": "如果选中,将在上传文件的远程目录下重新创建有关本地目录结构。否则,会将文件直接上传到远程目录而不创建其他子目录。
例如,假设源文件夹为: `/home/user/source/` ,它包含文件: `foo/bar/foobar.txt` ,而远程目录为: `/uploads/` 。 如果选中,文件将上传到: `/ uploads/foo/bar/foobar.txt` 。否则上传到: `/ uploads/foobar.txt` 。",
+ "loc.input.label.trustSSL": "信任服务器证书",
+ "loc.input.help.trustSSL": "选择此选项将通过 ftps:// 信任 FTP 服务器的 SSL 证书,即使它是自签名证书或无法由证书颁发机构(CA)验证的证书。",
+ "loc.input.label.customCmds": "FTP 命令",
+ "loc.input.help.customCmds": "连接时将发送到远程 FTP 服务器的可选 FTP 命令。",
+ "loc.messages.CleanRemoteDir": "正在删除远程目录: %s",
+ "loc.messages.CleanRemoteDirContents": "正在删除远程目录内容: %s",
+ "loc.messages.CleanFileDeleteFail": "尝试删除文件时出错: %s",
+ "loc.messages.ConnectPort": "正在连接到: %s:%s",
+ "loc.messages.Disconnected": "已断开连接",
+ "loc.messages.DisconnectHost": "正在断开与 %s 的连接 ",
+ "loc.messages.FTPConnected": "已连接: %s",
+ "loc.messages.InvalidFTPOptions": "阅读 FTP 选项时出现错误: %s",
+ "loc.messages.FTPNoHostSpecified": "FTP 服务器 URL 必需包括主机名",
+ "loc.messages.FTPNoProtocolSpecified": "FTP 服务器 URL 必需以 ftp:// 或 ftps:// 开头",
+ "loc.messages.NoFilesFound": "找不到任何要上传的文件",
+ "loc.messages.UploadRemoteDir": "正在将文件上传到远程目录: %s",
+ "loc.messages.UploadSucceedMsg": "FTP 已成功上传 %s",
+ "loc.messages.UploadSucceedRes": "FTP 已成功上传",
+ "loc.messages.UploadFailed": "FTP 上传失败"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..a194a934ea42
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,47 @@
+{
+ "loc.friendlyName": "FTP 上傳",
+ "loc.helpMarkDown": "使用檔案傳輸通訊協定 (FTP) 或更安全的 FTPS,將檔案上傳到遠端電腦。[詳細資訊](http://go.microsoft.com/fwlink/?LinkId=809084)。",
+ "loc.description": "使用 FTP 上傳檔案",
+ "loc.instanceNameFormat": "FTP 上傳: $(rootFolder)",
+ "loc.group.displayName.advanced": "進階",
+ "loc.input.label.credsType": "驗證方法",
+ "loc.input.help.credsType": "請使用 FTP 服務連線,或輸入連線認證。",
+ "loc.input.label.serverEndpoint": "FTP 服務連線",
+ "loc.input.help.serverEndpoint": "請為您的 FTP 伺服器選取服務連線。若要建立服務連線,請按一下 [管理連結],然後建立新的泛型服務連線,輸入伺服器 URL 的 FTP 伺服器 URL (例如: `ftp://server.example.com` ) 和必要認證。
無論指定何種通訊協定 ('ftp://' 或 'ftps://' ),只要目標伺服器支援 FTPS,一律會建立安全連線。若要只允許安全連線,請使用 'ftps://' 通訊協定,例如 'ftps://server.example.com' 。若指定了 'ftps://' ,但伺服器不支援 FTPS,連線將會失敗。",
+ "loc.input.label.serverUrl": "伺服器 URL",
+ "loc.input.label.username": "使用者名稱",
+ "loc.input.label.password": "密碼",
+ "loc.input.label.rootFolder": "根資料夾",
+ "loc.input.help.rootFolder": "要上傳之檔案所在的來源資料夾。",
+ "loc.input.label.filePatterns": "檔案模式",
+ "loc.input.help.filePatterns": "要上傳之檔案的檔案路徑或樣式。支援多行的 minimatch 樣式。[詳細資訊](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "loc.input.label.remotePath": "遠端目錄",
+ "loc.input.help.remotePath": "將檔案上傳到遠端 FTP 伺服器上的此目錄。",
+ "loc.input.label.enableUtf8": "啟用 UTF8 支援",
+ "loc.input.help.enableUtf8": "為 FTP 連線啟用 UTF-8 支援 ('OPTS UTF8 ON')。",
+ "loc.input.label.clean": "刪除遠端目錄",
+ "loc.input.help.clean": "先刪除遠端目錄 (包括其內容) 再上傳。",
+ "loc.input.label.cleanContents": "清除遠端目錄內容",
+ "loc.input.help.cleanContents": "先以遞迴方式刪除遠端目錄的所有內容再上傳。現有的目錄不會刪除。為達更佳效能,請考慮改為使用 `Delete remote directory`。",
+ "loc.input.label.preservePaths": "保留檔案路徑",
+ "loc.input.help.preservePaths": "如有選取,會在檔案上傳的遠端目錄下重新建立相對的本機目錄結構。否則,檔案會直接上傳到遠端目錄,而不會另外建立其他子目錄。
例如,假設您的來源資料來為 '/home/user/source/' ,其中包含了檔案 'foo/bar/foobar.txt' ,而您的遠端目錄為 '/uploads/' 。 如有選取,檔案會上傳到 '/uploads/foo/bar/foobar.txt' ,否則會上傳到 '/uploads/foobar.txt' 。",
+ "loc.input.label.trustSSL": "信任伺服器憑證",
+ "loc.input.help.trustSSL": "選取此選項會導致 FTP 伺服器的 SSL 憑證受 ftps:// 信任,即使它是自我簽署的憑證,或是憑證授權單位 (CA) 無法驗證的憑證亦然。",
+ "loc.input.label.customCmds": "FTP 命令",
+ "loc.input.help.customCmds": "連線時要傳送給遠端 FTP 伺服器的選用 FTP 命令。",
+ "loc.messages.CleanRemoteDir": "正在移除遠端目錄: %s",
+ "loc.messages.CleanRemoteDirContents": "正在移除遠端目錄內容: %s",
+ "loc.messages.CleanFileDeleteFail": "嘗試移除檔案時發生錯誤: %s",
+ "loc.messages.ConnectPort": "正在連線到: %s:%s",
+ "loc.messages.Disconnected": "已中斷連線",
+ "loc.messages.DisconnectHost": "正在中斷下項的連線: %s",
+ "loc.messages.FTPConnected": "已連線: %s",
+ "loc.messages.InvalidFTPOptions": "讀取 FTP 選項時發生錯誤: %s",
+ "loc.messages.FTPNoHostSpecified": "FTP 伺服器 URL 必須包含主機名稱。",
+ "loc.messages.FTPNoProtocolSpecified": "FTP 伺服器 URL 的開頭必須是 ftp:// 或 ftps://",
+ "loc.messages.NoFilesFound": "找不到任何要上傳的檔案",
+ "loc.messages.UploadRemoteDir": "正在將檔案上傳至遠端目錄: %s",
+ "loc.messages.UploadSucceedMsg": "FTP 上傳成功 %s",
+ "loc.messages.UploadSucceedRes": "FTP 上傳成功",
+ "loc.messages.UploadFailed": "Ftp 上傳失敗"
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0.ts b/_generated/FtpUploadV2_Node20/Tests/L0.ts
new file mode 100644
index 000000000000..a898ec6b1fd7
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0.ts
@@ -0,0 +1,140 @@
+import fs = require('fs');
+import assert = require('assert');
+import path = require('path');
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('FtpUploadV2 Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT!) || 20000);
+
+ it('check args: no serverEndpoint', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoServerEndpoint.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: serverEndpoint'), 'Should have printed: Input required: serverEndpoint');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no rootFolder', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoRootFolder.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: rootFolder'), 'Should have printed: Input required: rootFolder');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no filePatterns', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoFilePatterns.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: filePatterns'), 'Should have printed: Input required: filePatterns');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no remotePath', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoRemotePath.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: remotePath'), 'Should have printed: Input required: remotePath');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no clean', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoClean.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: clean'), 'Should have printed: Input required: clean');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no preservePaths', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoPreservePaths.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('Input required: preservePaths'), 'Should have printed: Input required: preservePaths');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no trustSSL', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoTrustSSL.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.invokedToolCount === 0, 'should not run anything');
+ assert(tr.stdOutContained('Input required: trustSSL'), 'Should have printed: Input required: trustSSL');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no protocol on server URL (ftp:// or ftps://)', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoProtocol.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('loc_mock_FTPNoProtocolSpecified'), 'Should have printed: loc_mock_FTPNoProtocolSpecified');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no host name on server URL', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoHostName.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('loc_mock_FTPNoHostSpecified'), 'Should have printed: loc_mock_FTPNoHostSpecified');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('check args: no files found', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0NoFilesFound.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stdOutContained('loc_mock_NoFilesFound'), 'Should have printed: loc_mock_NoFilesFound');
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('task should complete successfully', (done: Mocha.Done) => {
+ const tp = path.join(__dirname, 'L0Successful.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+ console.info(tr.stdout);
+ assert(tr.succeeded, 'task should succeed');
+
+ done();
+ });
+});
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoClean.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoClean.ts
new file mode 100644
index 000000000000..1fb4547bf018
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoClean.ts
@@ -0,0 +1,39 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoFilePatterns.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoFilePatterns.ts
new file mode 100644
index 000000000000..f0a851fd78f4
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoFilePatterns.ts
@@ -0,0 +1,37 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoFilesFound.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoFilesFound.ts
new file mode 100644
index 000000000000..a17d784d78b9
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoFilesFound.ts
@@ -0,0 +1,39 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('credsType', 'inputs');
+tr.setInput('serverUrl', 'ftps://');
+tr.setInput('username', 'username');
+tr.setInput('password', 'password');
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+tr.setInput('trustSSL', 'true');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ ]
+ },
+ "match": {
+ "*": [
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoHostName.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoHostName.ts
new file mode 100644
index 000000000000..ca9b0196d05b
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoHostName.ts
@@ -0,0 +1,45 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('credsType', 'inputs');
+tr.setInput('serverUrl', 'ftps://');
+tr.setInput('username', 'username');
+tr.setInput('password', 'password');
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+tr.setInput('trustSSL', 'true');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoPreservePaths.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoPreservePaths.ts
new file mode 100644
index 000000000000..85662c7fdade
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoPreservePaths.ts
@@ -0,0 +1,41 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoProtocol.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoProtocol.ts
new file mode 100644
index 000000000000..44c84485f9e0
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoProtocol.ts
@@ -0,0 +1,45 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('credsType', 'inputs');
+tr.setInput('serverUrl', 'noprotocol.microsoft.com');
+tr.setInput('username', 'myUsername');
+tr.setInput('password', 'myPassword');
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+tr.setInput('trustSSL', 'true');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoRemotePath.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoRemotePath.ts
new file mode 100644
index 000000000000..87a673e707d4
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoRemotePath.ts
@@ -0,0 +1,38 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoRootFolder.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoRootFolder.ts
new file mode 100644
index 000000000000..8972a7ec6c12
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoRootFolder.ts
@@ -0,0 +1,36 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoServerEndpoint.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoServerEndpoint.ts
new file mode 100644
index 000000000000..ba9740684299
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoServerEndpoint.ts
@@ -0,0 +1,37 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('credsType', 'serviceEndpoint');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "getVariable": {
+ "ENDPOINT_URL_ID1": "ftp://valid.microsoft.com",
+ "ENDPOINT_AUTH_ID1": "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}",
+ "build.sourcesDirectory": "/"
+ },
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0NoTrustSSL.ts b/_generated/FtpUploadV2_Node20/Tests/L0NoTrustSSL.ts
new file mode 100644
index 000000000000..fdc2d6b5dabf
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0NoTrustSSL.ts
@@ -0,0 +1,42 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/L0Successful.ts b/_generated/FtpUploadV2_Node20/Tests/L0Successful.ts
new file mode 100644
index 000000000000..338049fe5181
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/L0Successful.ts
@@ -0,0 +1,72 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+let taskPath = path.join(__dirname, '..', 'ftpuploadtask.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+const ftp = {
+ Client: function () {
+ this.ftp = {
+ log: () => { }
+ };
+ this.access = (options: any) => {
+ return {
+ message: "ftp mock response",
+ };
+ };
+ this.trackProgress = (callback: (info: any) => void) => {
+
+ };
+ this.send = (cmd: string) => {
+
+ };
+ this.ensureDir = (path: string) => { };
+ this.removeDir = (path: string) => { };
+ this.close = () => { };
+ },
+ ftp: {},
+ access: {},
+ trackProgress: {},
+ send: {},
+ ensureDir: {},
+ removeDir: {},
+ close: {},
+}
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('credsType', 'serviceEndpoint');
+process.env["ENDPOINT_URL_ID1"] = "ftp://valid.microsoft.com";
+process.env["ENDPOINT_AUTH_ID1"] = "{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}";
+process.env["build.sourcesDirectory"] = "/";
+tr.setInput('rootFolder', 'rootFolder');
+tr.setInput('filePatterns', '**');
+tr.setInput('remotePath', '/upload/');
+tr.setInput('clean', 'true');
+tr.setInput('overwrite', 'true');
+tr.setInput('preservePaths', 'true');
+tr.setInput('trustSSL', 'true');
+tr.registerMock("basic-ftp", ftp);
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "rootFolder": true
+ },
+ "find": {
+ "rootFolder": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ },
+ "match": {
+ "*": [
+ "rootFolder/a",
+ "rootFolder/b",
+ "rootFolder/c"
+ ]
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/FtpUploadV2_Node20/Tests/package-lock.json b/_generated/FtpUploadV2_Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..04ef5eaf8472
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "ftp-upload-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/_generated/FtpUploadV2_Node20/Tests/package.json b/_generated/FtpUploadV2_Node20/Tests/package.json
new file mode 100644
index 000000000000..5d38af358649
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "ftp-upload-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines FTP Upload V2 Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.7"
+ }
+}
diff --git a/_generated/FtpUploadV2_Node20/ThirdPartyNotice.txt b/_generated/FtpUploadV2_Node20/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..8e204374d4ab
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/ThirdPartyNotice.txt
@@ -0,0 +1,300 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (FtpUploadV2) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. azure-pipelines-task-lib (git+https://github.com/Microsoft/azure-pipelines-task-lib.git)
+3. balanced-match (git://github.com/juliangruber/balanced-match.git)
+4. basic-ftp (git+https://github.com/patrickjuchli/basic-ftp.git)
+5. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+6. concat-map (git://github.com/substack/node-concat-map.git)
+7. minimatch (git://github.com/isaacs/minimatch.git)
+8. mockery (git://github.com/mfncooper/mockery.git)
+9. q (git://github.com/kriskowal/q.git)
+10. semver (git+https://github.com/npm/node-semver.git)
+11. shelljs (git://github.com/arturadib/shelljs.git)
+12. uuid (git+https://github.com/kelektiv/node-uuid.git)
+
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF azure-pipelines-task-lib NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% basic-ftp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2019 Patrick Juchli
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF basic-ftp NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/FtpUploadV2_Node20/ftpuploadtask.ts b/_generated/FtpUploadV2_Node20/ftpuploadtask.ts
new file mode 100644
index 000000000000..13b427a02985
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/ftpuploadtask.ts
@@ -0,0 +1,399 @@
+import * as tl from "azure-pipelines-task-lib/task";
+import * as ftp from "basic-ftp";
+import * as fs from "fs";
+import * as os from "os";
+import * as path from "path";
+import * as url from "url";
+import { MatchOptions } from "azure-pipelines-task-lib/task";
+
+interface FtpOptions {
+ // url
+ serverEndpointUrl: url.Url;
+
+ // credentials
+ username: string;
+ password: string;
+
+ // other standard options
+ rootFolder: string;
+ filePatterns: string[];
+ remotePath: string;
+
+ // advanced options
+ clean: boolean;
+ cleanContents: boolean;
+ preservePaths: boolean;
+ trustSSL: boolean;
+ implicitFTPS: boolean;
+ enableUtf8: boolean;
+ customCmds: string[];
+}
+
+class ProgressTracker {
+ progressFilesUploaded: number = 0;
+ progressDirectoriesProcessed: number = 0;
+
+ constructor(private ftpOptions: FtpOptions, private fileCount: number) {
+ this.ftpOptions = ftpOptions;
+ this.fileCount = fileCount;
+ }
+
+ directoryProcessed(name: string): void {
+ this.progressDirectoriesProcessed++;
+ this.printProgress(
+ "remote directory successfully created/verified: " + name
+ );
+ }
+
+ fileUploaded(file: string, remoteFile: string): void {
+ this.progressFilesUploaded++;
+ this.printProgress("successfully uploaded: " + file + " to: " + remoteFile);
+ }
+
+ printProgress(message: string): void {
+ const total: number =
+ this.progressFilesUploaded + this.progressDirectoriesProcessed;
+ const remaining: number = this.fileCount - total;
+ console.log(
+ "files uploaded: " + this.progressFilesUploaded +
+ ", directories processed: " + this.progressDirectoriesProcessed +
+ ", total: " + total +
+ ", remaining: " + remaining +
+ ", " + message
+ );
+ }
+
+ getSuccessStatusMessage(): string {
+ return (
+ os.EOL + "host: " + this.ftpOptions.serverEndpointUrl.host +
+ os.EOL + "path: " + this.ftpOptions.remotePath +
+ os.EOL + "files uploaded: " + this.progressFilesUploaded +
+ os.EOL + "directories processed: " + this.progressDirectoriesProcessed
+ );
+ }
+
+ getFailureStatusMessage(): string {
+ const total: number =
+ this.progressFilesUploaded + this.progressDirectoriesProcessed;
+ const remaining: number = this.fileCount - total;
+ return (
+ this.getSuccessStatusMessage() + os.EOL + "unprocessed files & directories: " + remaining
+ );
+ }
+}
+
+function findFiles(ftpOptions: FtpOptions): string[] {
+ tl.debug("Searching for files to upload");
+ let error: any | undefined;
+ try {
+ const rootFolderStats = tl.stats(ftpOptions.rootFolder);
+ if (rootFolderStats.isFile()) {
+ const file = ftpOptions.rootFolder;
+ tl.debug(file + " is a file. Ignoring all file patterns");
+ return [file];
+ }
+
+ const allFiles = tl.find(ftpOptions.rootFolder);
+
+ // filePatterns is a multiline input containing glob patterns
+ tl.debug(
+ "searching for files using: " +
+ ftpOptions.filePatterns.length +
+ " filePatterns: " +
+ ftpOptions.filePatterns
+ );
+
+ // minimatch options
+ const matchOptions = { matchBase: true, dot: true } as MatchOptions;
+ const platform = tl.getPlatform()
+ tl.debug("Platform: " + platform);
+ if (platform === tl.Platform.Windows) {
+ matchOptions["nocase"] = true;
+ }
+
+ tl.debug("Candidates found for match: " + allFiles.length);
+ for (let i = 0; i < allFiles.length; i++) {
+ tl.debug("file: " + allFiles[i]);
+ }
+
+ // use a set to avoid duplicates
+ let matchingFilesSet: Set = new Set();
+
+ for (let i = 0; i < ftpOptions.filePatterns.length; i++) {
+ let normalizedPattern: string = path.join(
+ ftpOptions.rootFolder,
+ path.normalize(ftpOptions.filePatterns[i])
+ );
+
+ tl.debug("searching for files, pattern: " + normalizedPattern);
+
+ const matched = tl.match(allFiles, normalizedPattern, undefined, matchOptions);
+ tl.debug("Found total matches: " + matched.length);
+ // ensure each result is only added once
+ for (let j = 0; j < matched.length; j++) {
+ let match = path.normalize(matched[j]);
+ let stats = tl.stats(match);
+ if (!ftpOptions.preservePaths && stats.isDirectory()) {
+ // if not preserving paths, skip all directories
+ } else if (matchingFilesSet.add(match)) {
+ tl.debug(
+ "adding " + (stats.isFile() ? "file: " : "folder: ") + match
+ );
+ if (stats.isFile() && ftpOptions.preservePaths) {
+ // if preservePaths, make sure the parent directory is also included
+ let parent = path.normalize(path.dirname(match));
+ if (matchingFilesSet.add(parent)) {
+ tl.debug("adding folder: " + parent);
+ }
+ }
+ }
+ }
+ }
+
+ return Array.from(matchingFilesSet).sort();
+ }
+ catch (err) {
+ err = error;
+ tl.error(error);
+ tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
+ }
+
+ return [];
+}
+
+function getFtpOptions(): FtpOptions {
+ let serverEndpointUrl: url.UrlWithStringQuery;
+ let username: string;
+ let password: string;
+
+ if (tl.getInput("credsType") === "serviceEndpoint") {
+ // server endpoint
+ const serverEndpoint: string = tl.getInput("serverEndpoint", true)!;
+ serverEndpointUrl = url.parse(
+ tl.getEndpointUrl(serverEndpoint, false)!
+ );
+
+ const serverEndpointAuth: tl.EndpointAuthorization = tl.getEndpointAuthorization(
+ serverEndpoint,
+ false
+ )!;
+ username = serverEndpointAuth["parameters"]["username"];
+ password = serverEndpointAuth["parameters"]["password"];
+ } else {
+ // user entered credentials directly
+ serverEndpointUrl = url.parse(tl.getInput("serverUrl", true)!);
+ username = tl.getInput("username", true)!;
+ password = tl.getInput("password", true)!;
+ }
+
+ return {
+ serverEndpointUrl: serverEndpointUrl,
+ username: username,
+ password: password,
+
+ // other standard options
+ rootFolder: tl.getPathInput("rootFolder", true)!,
+ filePatterns: tl.getDelimitedInput("filePatterns", "\n", true),
+ remotePath: tl.getInput("remotePath", true)!.trim().replace(/\\/gi, "/"), // use forward slashes always
+
+ // advanced options
+ clean: tl.getBoolInput("clean", true),
+ cleanContents: tl.getBoolInput("cleanContents", false),
+ preservePaths: tl.getBoolInput("preservePaths", true),
+ trustSSL: tl.getBoolInput("trustSSL", true),
+ implicitFTPS: tl.getBoolInput("implicitFTPS", false),
+ enableUtf8: tl.getBoolInput("enableUtf8", false),
+ customCmds: tl.getDelimitedInput("customCmds", "\n", false)
+
+ };
+}
+
+function getAccessOption(options: FtpOptions): ftp.AccessOptions {
+ const protocol = options.serverEndpointUrl.protocol;
+ let secure: boolean | "implicit";
+ if (options.implicitFTPS) {
+ secure = "implicit";
+ }
+ else {
+ secure = !!protocol && protocol.toLowerCase() === "ftps:";
+ }
+
+ const secureOptions: any = { rejectUnauthorized: !options.trustSSL };
+
+ const hostName: string = options.serverEndpointUrl.hostname!;
+ const portStr: string = options.serverEndpointUrl.port!;
+ let port: number = 21;
+ if (portStr) {
+ // port not explicitly specified, use default
+ port = parseInt(portStr);
+ }
+
+ console.log(tl.loc("ConnectPort", hostName, port));
+
+ return {
+ host: hostName,
+ port: port,
+ user: options.username,
+ password: options.password,
+ secure: secure,
+ secureOptions: secureOptions
+ };
+}
+
+async function getFtpClient(options: FtpOptions): Promise {
+ const ftpClient = new ftp.Client();
+ ftpClient.ftp.log = tl.debug;
+ const accessOptions = getAccessOption(options);
+ const response = await ftpClient.access(accessOptions);
+ tl.debug("ftp client greeting");
+ console.log(tl.loc("FTPConnected", response.message));
+
+ ftpClient.trackProgress(info => {
+ console.log(
+ `File: ${info.name} Type: ${info.type} Transferred: ${info.bytes}`
+ );
+ });
+
+ // Run custom commands upon connection
+ if (options.enableUtf8) {
+ await ftpClient.send("OPTS UTF8 ON");
+ }
+
+ if (options.customCmds) {
+ for (const cmd of options.customCmds) {
+ await ftpClient.send(cmd);
+ }
+ }
+
+ return ftpClient;
+}
+
+async function run() {
+ tl.setResourcePath(path.join(__dirname, "task.json"));
+
+ const tries = 3;
+ let ftpOptions: FtpOptions;
+ try {
+ ftpOptions = getFtpOptions();
+ } catch (err) {
+ tl.setResult(tl.TaskResult.Failed, tl.loc('InvalidFTPOptions', err));
+ return;
+ }
+
+ if (!ftpOptions.serverEndpointUrl.protocol) {
+ tl.setResult(tl.TaskResult.Failed, tl.loc("FTPNoProtocolSpecified"));
+ }
+ if (!ftpOptions.serverEndpointUrl.hostname) {
+ tl.setResult(tl.TaskResult.Failed, tl.loc("FTPNoHostSpecified"));
+ }
+
+ const files: string[] = findFiles(ftpOptions);
+ const tracker = new ProgressTracker(ftpOptions, files.length);
+ if (files.length === 0) {
+ tl.warning(tl.loc("NoFilesFound"));
+ return;
+ }
+
+ let ftpClient: ftp.Client;
+ let error: any | undefined;
+ try {
+ ftpClient = await getFtpClient(ftpOptions);
+ } catch (err) {
+ error = err;
+ tl.error(error);
+ tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
+ return;
+ }
+
+ let sleep = (milliseconds: number) => {
+ return new Promise(resolve => setTimeout(resolve, milliseconds));
+ }
+
+ let retryWithNewClient = async (task: () => {}, retry: number) => {
+ let e = null;
+ while (retry > 0) {
+ try {
+ await task();
+ return;
+ } catch (err) {
+ e = err;
+ error = err;
+ tl.warning(error);
+ ftpClient.close();
+
+ await sleep(1000);
+ ftpClient = await getFtpClient(ftpOptions);
+
+ retry--;
+ }
+ }
+
+ if (e) {
+ throw e;
+ }
+ };
+
+ try {
+ // clean option all assumes the folder exists as it tries to cd into it
+ await retryWithNewClient(async () => {
+ await ftpClient.ensureDir(ftpOptions.remotePath);
+ }, tries);
+ if (ftpOptions.clean) {
+ console.log(tl.loc("CleanRemoteDir", ftpOptions.remotePath));
+ await retryWithNewClient(async () => {
+ await ftpClient.removeDir(ftpOptions.remotePath);
+ }, tries);
+ } else if (ftpOptions.cleanContents) {
+ console.log(tl.loc("CleanRemoteDirContents", ftpOptions.remotePath));
+ await retryWithNewClient(async () => {
+ await ftpClient.cd(ftpOptions.remotePath);
+ await ftpClient.clearWorkingDir();
+ }, tries);
+ }
+
+ // remotely, ensure we are in remote path
+ await retryWithNewClient(async () => {
+ await ftpClient.ensureDir(ftpOptions.remotePath);
+ }, tries);
+
+ for (const file of files) {
+ tl.debug("file: " + file);
+ let remoteFile: string = ftpOptions.preservePaths
+ ? path.join(
+ ftpOptions.remotePath,
+ file.substring(ftpOptions.rootFolder.length)
+ )
+ : path.join(ftpOptions.remotePath, path.basename(file));
+
+ remoteFile = remoteFile.replace(/\\/gi, "/"); // always use forward slashes
+ tl.debug("remoteFile: " + remoteFile);
+
+ let stats = tl.stats(file);
+ if (stats.isDirectory()) {
+ await retryWithNewClient(async () => {
+ await ftpClient.ensureDir(remoteFile);
+ }, tries);
+ tracker.directoryProcessed(remoteFile);
+ } else if (stats.isFile()) {
+ // upload files
+ await retryWithNewClient(async () => {
+ await ftpClient.upload(fs.createReadStream(file), remoteFile);
+ }, tries);
+ tracker.fileUploaded(file, remoteFile);
+ }
+ }
+
+ console.log(tl.loc("UploadSucceedMsg", tracker.getSuccessStatusMessage()));
+ } catch (err) {
+ error = err;
+ tl.error(error);
+ console.log(tracker.getFailureStatusMessage());
+ tl.setResult(tl.TaskResult.Failed, tl.loc("UploadFailed"));
+ } finally {
+ console.log(tl.loc("DisconnectHost", ftpOptions.serverEndpointUrl.host));
+ ftpClient.trackProgress(() => { });
+ ftpClient.close();
+ }
+}
+
+run();
diff --git a/_generated/FtpUploadV2_Node20/icon.png b/_generated/FtpUploadV2_Node20/icon.png
new file mode 100644
index 000000000000..490abba147c9
Binary files /dev/null and b/_generated/FtpUploadV2_Node20/icon.png differ
diff --git a/_generated/FtpUploadV2_Node20/icon.svg b/_generated/FtpUploadV2_Node20/icon.svg
new file mode 100644
index 000000000000..e5d5684a3791
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/icon.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/_generated/FtpUploadV2_Node20/package-lock.json b/_generated/FtpUploadV2_Node20/package-lock.json
new file mode 100644
index 000000000000..883fd0ed7a5c
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/package-lock.json
@@ -0,0 +1,488 @@
+{
+ "name": "FTP",
+ "version": "2.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz",
+ "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw=="
+ },
+ "@types/node": {
+ "version": "20.8.2",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz",
+ "integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "basic-ftp": {
+ "version": "4.6.6",
+ "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-4.6.6.tgz",
+ "integrity": "sha512-5nTclY5mVxjeFoq9cBTzgQvcM1UfeGTd4hCCvb8AgC88wHMDQCD4UX5hZo2jaiSh96Nf+gFy1joNI9iH639bvQ=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/FtpUploadV2_Node20/package.json b/_generated/FtpUploadV2_Node20/package.json
new file mode 100644
index 000000000000..0f1786d8d8d2
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "FTP",
+ "version": "2.0.0",
+ "description": "FTP Upload Task",
+ "main": "ftpuploadtask.js",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^9.1.1",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0",
+ "basic-ftp": "^4.6.6"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/_generated/FtpUploadV2_Node20/task.json b/_generated/FtpUploadV2_Node20/task.json
new file mode 100644
index 000000000000..0138852bef2a
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/task.json
@@ -0,0 +1,226 @@
+{
+ "id": "6f8c69a5-b023-428e-a125-fccf4efcb929",
+ "name": "FtpUpload",
+ "friendlyName": "FTP upload",
+ "description": "Upload files using FTP",
+ "author": "Microsoft Corporation",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/ftp-upload",
+ "helpMarkDown": "Upload files to a remote machine using the File Transfer Protocol (FTP), or securely with FTPS. [More Information](http://go.microsoft.com/fwlink/?LinkId=809084).",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [],
+ "version": {
+ "Major": 2,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "FTP Upload: $(rootFolder)",
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "Advanced",
+ "isExpanded": true
+ }
+ ],
+ "inputs": [
+ {
+ "name": "credsType",
+ "aliases": [
+ "credentialsOption"
+ ],
+ "type": "pickList",
+ "label": "Authentication Method",
+ "defaultValue": "serviceEndpoint",
+ "required": true,
+ "helpMarkDown": "Use FTP service connection or enter connection credentials.",
+ "options": {
+ "serviceEndpoint": "FTP service connection",
+ "inputs": "Enter credentials"
+ }
+ },
+ {
+ "name": "serverEndpoint",
+ "type": "connectedService:Generic",
+ "label": "FTP Service Connection",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the service connection for your FTP server. To create one, click the Manage link and create a new Generic service connection, enter the FTP server URL for the server URL, e.g. `ftp://server.example.com` , and required credentials.Secure connections will always be made regardless of the specified protocol (`ftp://` or `ftps://` ) if the target server supports FTPS. To allow only secure connections, use the `ftps://` protocol, e.g. `ftps://server.example.com` . Connections to servers not supporting FTPS will fail if `ftps://` is specified.",
+ "visibleRule": "credsType = serviceEndpoint"
+ },
+ {
+ "name": "serverUrl",
+ "type": "string",
+ "label": "Server URL",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "username",
+ "type": "string",
+ "label": "Username",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "password",
+ "type": "string",
+ "label": "Password",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "implicitFTPS",
+ "type": "boolean",
+ "label": "Use implicit FTPS",
+ "defaultValue": "false",
+ "required": false
+ },
+ {
+ "name": "rootFolder",
+ "aliases": [
+ "rootDirectory"
+ ],
+ "type": "filePath",
+ "label": "Root folder",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "The source folder to upload files from."
+ },
+ {
+ "name": "filePatterns",
+ "type": "multiLine",
+ "label": "File patterns",
+ "defaultValue": "**",
+ "required": true,
+ "helpMarkDown": "File paths or patterns of the files to upload. Supports multiple lines of minimatch patterns. [More Information](https://go.microsoft.com/fwlink/?LinkId=800269)",
+ "properties": {
+ "resizable": "true",
+ "rows": "4"
+ }
+ },
+ {
+ "name": "remotePath",
+ "aliases": [
+ "remoteDirectory"
+ ],
+ "type": "string",
+ "label": "Remote directory",
+ "defaultValue": "/upload/$(Build.BuildId)/",
+ "required": true,
+ "helpMarkDown": "Upload files to this directory on the remote FTP server."
+ },
+ {
+ "name": "enableUtf8",
+ "type": "boolean",
+ "label": "Enable UTF8 support",
+ "defaultValue": "false",
+ "required": false,
+ "helpMarkDown": "Enables UTF-8 support for the FTP connection ('OPTS UTF8 ON').",
+ "groupName": "advanced"
+ },
+ {
+ "name": "clean",
+ "type": "boolean",
+ "label": "Delete remote directory",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "Delete the remote directory including its contents before uploading.",
+ "groupName": "advanced"
+ },
+ {
+ "name": "cleanContents",
+ "type": "boolean",
+ "label": "Clear remote directory contents",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "Recursively delete all contents of the remote directory before uploading. The existing directory will not be deleted. For better performance, consider using `Delete remote directory` instead.",
+ "groupName": "advanced",
+ "visibleRule": "clean = false"
+ },
+ {
+ "name": "preservePaths",
+ "type": "boolean",
+ "label": "Preserve file paths",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "If selected, the relative local directory structure is recreated under the remote directory where files are uploaded. Otherwise, files are uploaded directly to the remote directory without creating additional subdirectories.
For example, suppose your source folder is: `/home/user/source/` and contains the file: `foo/bar/foobar.txt` , and your remote directory is: `/uploads/` . If selected, the file is uploaded to: `/uploads/foo/bar/foobar.txt` . Otherwise, to: `/uploads/foobar.txt` .",
+ "groupName": "advanced"
+ },
+ {
+ "name": "trustSSL",
+ "type": "boolean",
+ "label": "Trust server certificate",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "Selecting this option results in the FTP server's SSL certificate being trusted with ftps://, even if it is self-signed or cannot be validated by a Certificate Authority (CA).",
+ "groupName": "advanced"
+ },
+ {
+ "name": "customCmds",
+ "type": "multiLine",
+ "label": "FTP Commands",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "Optional FTP Commands that will be sent to the remote FTP server upon connection.",
+ "groupName": "advanced",
+ "properties": {
+ "resizable": "true",
+ "rows": "2"
+ }
+ }
+ ],
+ "execution": {
+ "Node10": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": []
+ }
+ },
+ "messages": {
+ "CleanRemoteDir": "removing remote directory: %s",
+ "CleanRemoteDirContents": "removing remote directory contents: %s",
+ "CleanFileDeleteFail": "an error occurred while trying to remove file: %s",
+ "ConnectPort": "connecting to: %s:%s",
+ "Disconnected": "disconnected",
+ "DisconnectHost": "disconnecting from: %s",
+ "FTPConnected": "connected: %s",
+ "InvalidFTPOptions": "There was an error when reading FTP options: %s",
+ "FTPNoHostSpecified": "The FTP server URL must include a host name",
+ "FTPNoProtocolSpecified": "The FTP server URL must begin with ftp:// or ftps://",
+ "NoFilesFound": "Could not find any files to upload",
+ "UploadRemoteDir": "uploading files to remote directory: %s",
+ "UploadSucceedMsg": "FTP upload successful %s",
+ "UploadSucceedRes": "FTP upload successful",
+ "UploadFailed": "Ftp Upload failed"
+ },
+ "_buildConfigMapping": {
+ "Default": "2.229.3",
+ "Node20-225": "2.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/task.loc.json b/_generated/FtpUploadV2_Node20/task.loc.json
new file mode 100644
index 000000000000..8487f465bf2c
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/task.loc.json
@@ -0,0 +1,226 @@
+{
+ "id": "6f8c69a5-b023-428e-a125-fccf4efcb929",
+ "name": "FtpUpload",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "author": "Microsoft Corporation",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/ftp-upload",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [],
+ "version": {
+ "Major": 2,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "ms-resource:loc.group.displayName.advanced",
+ "isExpanded": true
+ }
+ ],
+ "inputs": [
+ {
+ "name": "credsType",
+ "aliases": [
+ "credentialsOption"
+ ],
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.credsType",
+ "defaultValue": "serviceEndpoint",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.credsType",
+ "options": {
+ "serviceEndpoint": "FTP service connection",
+ "inputs": "Enter credentials"
+ }
+ },
+ {
+ "name": "serverEndpoint",
+ "type": "connectedService:Generic",
+ "label": "ms-resource:loc.input.label.serverEndpoint",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.serverEndpoint",
+ "visibleRule": "credsType = serviceEndpoint"
+ },
+ {
+ "name": "serverUrl",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.serverUrl",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "username",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.username",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "password",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.password",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "credsType = inputs"
+ },
+ {
+ "name": "implicitFTPS",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.implicitFTPS",
+ "defaultValue": "false",
+ "required": false
+ },
+ {
+ "name": "rootFolder",
+ "aliases": [
+ "rootDirectory"
+ ],
+ "type": "filePath",
+ "label": "ms-resource:loc.input.label.rootFolder",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.rootFolder"
+ },
+ {
+ "name": "filePatterns",
+ "type": "multiLine",
+ "label": "ms-resource:loc.input.label.filePatterns",
+ "defaultValue": "**",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.filePatterns",
+ "properties": {
+ "resizable": "true",
+ "rows": "4"
+ }
+ },
+ {
+ "name": "remotePath",
+ "aliases": [
+ "remoteDirectory"
+ ],
+ "type": "string",
+ "label": "ms-resource:loc.input.label.remotePath",
+ "defaultValue": "/upload/$(Build.BuildId)/",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.remotePath"
+ },
+ {
+ "name": "enableUtf8",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.enableUtf8",
+ "defaultValue": "false",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.enableUtf8",
+ "groupName": "advanced"
+ },
+ {
+ "name": "clean",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.clean",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.clean",
+ "groupName": "advanced"
+ },
+ {
+ "name": "cleanContents",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.cleanContents",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.cleanContents",
+ "groupName": "advanced",
+ "visibleRule": "clean = false"
+ },
+ {
+ "name": "preservePaths",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.preservePaths",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.preservePaths",
+ "groupName": "advanced"
+ },
+ {
+ "name": "trustSSL",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.trustSSL",
+ "defaultValue": "false",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.trustSSL",
+ "groupName": "advanced"
+ },
+ {
+ "name": "customCmds",
+ "type": "multiLine",
+ "label": "ms-resource:loc.input.label.customCmds",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.customCmds",
+ "groupName": "advanced",
+ "properties": {
+ "resizable": "true",
+ "rows": "2"
+ }
+ }
+ ],
+ "execution": {
+ "Node10": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "ftpuploadtask.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": []
+ }
+ },
+ "messages": {
+ "CleanRemoteDir": "ms-resource:loc.messages.CleanRemoteDir",
+ "CleanRemoteDirContents": "ms-resource:loc.messages.CleanRemoteDirContents",
+ "CleanFileDeleteFail": "ms-resource:loc.messages.CleanFileDeleteFail",
+ "ConnectPort": "ms-resource:loc.messages.ConnectPort",
+ "Disconnected": "ms-resource:loc.messages.Disconnected",
+ "DisconnectHost": "ms-resource:loc.messages.DisconnectHost",
+ "FTPConnected": "ms-resource:loc.messages.FTPConnected",
+ "InvalidFTPOptions": "ms-resource:loc.messages.InvalidFTPOptions",
+ "FTPNoHostSpecified": "ms-resource:loc.messages.FTPNoHostSpecified",
+ "FTPNoProtocolSpecified": "ms-resource:loc.messages.FTPNoProtocolSpecified",
+ "NoFilesFound": "ms-resource:loc.messages.NoFilesFound",
+ "UploadRemoteDir": "ms-resource:loc.messages.UploadRemoteDir",
+ "UploadSucceedMsg": "ms-resource:loc.messages.UploadSucceedMsg",
+ "UploadSucceedRes": "ms-resource:loc.messages.UploadSucceedRes",
+ "UploadFailed": "ms-resource:loc.messages.UploadFailed"
+ },
+ "_buildConfigMapping": {
+ "Default": "2.229.3",
+ "Node20-225": "2.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/FtpUploadV2_Node20/tsconfig.json b/_generated/FtpUploadV2_Node20/tsconfig.json
new file mode 100644
index 000000000000..39be0591f39c
--- /dev/null
+++ b/_generated/FtpUploadV2_Node20/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs",
+ "skipLibCheck": true,
+ "strict": true
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2.versionmap.txt b/_generated/InstallAppleCertificateV2.versionmap.txt
new file mode 100644
index 000000000000..4a312fb3b52c
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2.versionmap.txt
@@ -0,0 +1,2 @@
+Default|2.229.3
+Node20-225|2.229.4
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/de-DE/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..2e36f5908d07
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Apple-Zertifikat installieren",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Hiermit wird ein Apple-Zertifikat installiert, das für den Buildvorgang auf einem macOS-Agent-Computer erforderlich ist.",
+ "loc.instanceNameFormat": "Apple-Zertifikat installieren",
+ "loc.releaseNotes": "Hiermit werden Codesignaturblockaden auf einem selbstgehosteten Agent behoben. Das Kennwort für den Schlüsselbund ist jetzt erforderlich, um \"Standardschlüsselbund\" oder \"Benutzerdefinierter Schlüsselbund\" zu verwenden. Für gehostete Microsoft-Builds muss \"Temporärer Schlüsselbund\" verwendet werden.",
+ "loc.group.displayName.advanced": "Erweitert",
+ "loc.input.label.certSecureFile": "Zertifikat (P12)",
+ "loc.input.help.certSecureFile": "Wählen Sie das Zertifikat (P12) aus, das in \"Secure Files\" (sichere Dateien) für die Installation auf dem macOS-Agent hochgeladen wurde.",
+ "loc.input.label.certPwd": "Zertifikatkennwort (P12)",
+ "loc.input.help.certPwd": "Kennwort für das Apple-Zertifikat (P12). Verwenden Sie eine neue Buildvariable, deren Sperre auf der Registerkarte \"Variablen\" aktiviert ist, um diesen Wert zu verschlüsseln.",
+ "loc.input.label.keychain": "Keychain",
+ "loc.input.help.keychain": "Wählen Sie die Keychain (die bei Apple \"Schlüsselbund\" genannt wird) aus, in der das Apple-Zertifikat installiert werden soll. Für gehostete Microsoft-Builds verwenden Sie \"Temporärer Schlüsselbund\" aus. Ein temporärer Schlüsselbund wird nach Build- oder Releaseabschluss immer gelöscht.",
+ "loc.input.label.keychainPassword": "Keychain-Kennwort",
+ "loc.input.help.keychainPassword": "Kennwort zum Entsperren des Schlüsselbunds. Verwenden Sie eine neue Buildvariable, deren Sperre auf der Registerkarte \"Variablen\" aktiviert ist, um diesen Wert zu verschlüsseln.",
+ "loc.input.label.customKeychainPath": "Pfad zur benutzerdefinierten Keychain",
+ "loc.input.help.customKeychainPath": "Vollständiger Pfad zu einer benutzerdefinierten Keychain-Datei. Wenn keine Keychain vorhanden ist, wird eine erstellt.",
+ "loc.input.label.deleteCert": "Zertifikat aus Keychain löschen",
+ "loc.input.help.deleteCert": "Wählen Sie, dass das Zertifikat nach Abschluss des Builds oder der Release aus der Keychain gelöscht wird.",
+ "loc.input.label.deleteCustomKeychain": "Benutzerdefinierte Keychain löschen",
+ "loc.input.help.deleteCustomKeychain": "Wählen Sie, dass die benutzerdefinierte Keychain nach Abschluss des Builds oder der Release aus dem Agent gelöscht wird.",
+ "loc.input.label.signingIdentity": "Zertifikatsignaturidentität",
+ "loc.input.help.signingIdentity": "Der allgemeine Name der Person im Signaturzertifikat. Wenn keine Angabe erfolgt, wird versucht, den allgemeinen Namen zu analysieren.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Partition_id-ACL für den importierten privaten Schlüssel einrichten",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "Bei „true“ wird die partition_id-ACL für den importierten privaten Schlüssel festgelegt, sodass codesign nicht zur Verwendung des Schlüssels zum Signieren auffordert. Dies ist für temporäre Keychains mindestens unter MacOS High Sierra nicht erforderlich. Weitere Informationen finden Sie im [link](http://www.openradar.me/28524119).",
+ "loc.messages.INVALID_P12": "Der Zertifikat-SHA1-Hash und der allgemeine Name (CN) wurden nicht gefunden. Das Zertifikat muss eine gültige P12-Datei sein.",
+ "loc.messages.NoP12PwdWarning": "Es wurde kein P12-Kennwort angegeben. Wenn für die P12-Datei ein Kennwort erforderlich ist, wird empfohlen, dieses als Pipelinevariable anzugeben und durch Aktivieren des Schlosssymbols als geheim zu markieren.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Fehler beim Identifizieren des Namens für den privaten Schlüssel: %s ",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Nicht benötigte partition_id-ACL-Schlüsselbundzuweisung wird auf diesem älteren Betriebssystem übersprungen. Der Sicherheitsbefehl \"set-key-partition-list\" wurde in macOS Sierra (10.12) eingeführt.",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Fehler beim Festlegen der partition_id-ACL für den privaten Schlüssel. Überprüfen Sie, ob \"Kennwort für Schlüsselbund\" richtig ist, oder verwenden Sie stattdessen \"Temporärer Schlüsselbund\".",
+ "loc.messages.InstallRequiresMac": "Für die Installation eines Apple-Zertifikats wird ein macOS-Agent benötigt. Das Installieren von Apple-Zertifikaten auf Linux oder Windows wird von Apple nicht unterstützt.",
+ "loc.messages.CertNotValidYetError": "Das Zertifikat \"%s\" (Fingerabdruck: \"%s\") ist erst ab dem %s gültig.",
+ "loc.messages.CertExpiredError": "Das Zertifikat \"%s\" (Fingerabdruck: \"%s\") ist am %s abgelaufen."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/en-US/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..dc57e3e4bd4c
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,37 @@
+{
+ "loc.friendlyName": "Install Apple certificate",
+ "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Install an Apple certificate required to build on a macOS agent machine",
+ "loc.instanceNameFormat": "Install an Apple certificate",
+ "loc.releaseNotes": "Fixes codesign hangs on a self hosted agent. A Keychain password is now required to use `Default Keychain` or `Custom Keychain`. Microsoft hosted builds should use `Temporary Keychain`.",
+ "loc.group.displayName.advanced": "Advanced",
+ "loc.input.label.certSecureFile": "Certificate (P12)",
+ "loc.input.help.certSecureFile": "Select the certificate (.p12) that was uploaded to `Secure Files` to install on the macOS agent.",
+ "loc.input.label.certPwd": "Certificate (P12) password",
+ "loc.input.help.certPwd": "Password to the Apple certificate (.p12). Use a new build variable with its lock enabled on the `Variables` tab to encrypt this value.",
+ "loc.input.label.keychain": "Keychain",
+ "loc.input.help.keychain": "Select the keychain in which to install the Apple certificate. For Microsoft hosted builds, use `Temporary Keychain`. A temporary keychain will always be deleted after the build or release is complete.",
+ "loc.input.label.keychainPassword": "Keychain password",
+ "loc.input.help.keychainPassword": "Password to unlock the keychain. Use a new build variable with its lock enabled on the `Variables` tab to encrypt this value.",
+ "loc.input.label.customKeychainPath": "Custom keychain path",
+ "loc.input.help.customKeychainPath": "Full path to a custom keychain file. The keychain will be created if it does not exist.",
+ "loc.input.label.deleteCert": "Delete certificate from keychain",
+ "loc.input.help.deleteCert": "Select to delete the certificate from the keychain after the build or release is complete.",
+ "loc.input.label.deleteCustomKeychain": "Delete custom keychain",
+ "loc.input.help.deleteCustomKeychain": "Select to delete the custom keychain from the agent after the build or release is complete.",
+ "loc.input.label.signingIdentity": "Certificate signing identity",
+ "loc.input.help.signingIdentity": "The Common Name of the subject in the signing certificate. Will attempt to parse the Common Name if this is left empty.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Set up partition_id ACL for the imported private key",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "If true - sets the partition_id ACL for the imported private key, so codesign won't prompt to use the key for signing. This isn't necessary for temporary keychains, at least on MacOS High Sierra. See the [link](http://www.openradar.me/28524119) for more details.",
+ "loc.input.label.opensslPkcsArgs": "OpenSSL arguments for PKCS12",
+ "loc.input.help.opensslPkcsArgs": "Arguments for extraction certificate information using openssl.",
+ "loc.messages.INVALID_P12": "Unable to find the certificate SHA1 hash and common name (CN). Verify that the certificate is a valid P12.",
+ "loc.messages.NoP12PwdWarning": "No P12 password was supplied. If the P12 file requires a password, the best practice is to supply it as pipeline variable and mark it secret by enabling the lock icon.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Failed to identify the private key name: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Skipping unnecessary keychain partition_id ACL assignment on this older OS. The security command 'set-key-partition-list' was introduced in macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Error setting the partition_id ACL for the private key. Verify that the `Keychain password` is correct, or use a `Temporary Keychain` instead.",
+ "loc.messages.InstallRequiresMac": "Install Apple Certificate requires a macOS agent. Installing Apple Certificates on Linux or Windows is not supported by Apple.",
+ "loc.messages.CertNotValidYetError": "Certificate \"%s\" (fingerprint: %s) isn't valid until %s",
+ "loc.messages.CertExpiredError": "Certificate \"%s\" (fingerprint: %s) expired on %s",
+ "loc.messages.OpenSSLError": "Error parsing certificate. This might be caused by an unsupported algorithm. If you're using old certificate with a new OpenSSL version try to set -legacy flag in opensslPkcsArgs input."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/es-ES/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..061b43ce7999
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Instalar certificado de Apple",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Instala un certificado de Apple necesario para compilar en una máquina de agente de macOS.",
+ "loc.instanceNameFormat": "Instalar un certificado de Apple",
+ "loc.releaseNotes": "Corrige los bloqueos de la firma de código en un agente autohospedado. Una contraseña de cadena de claves debe utilizar ahora \"Default Keychain\" o \"Custom Keychain\". Las compilaciones hospedadas por Microsoft deben usar \"Temporary Keychain\".",
+ "loc.group.displayName.advanced": "Avanzado",
+ "loc.input.label.certSecureFile": "Certificado (P12)",
+ "loc.input.help.certSecureFile": "Seleccione el certificado (.p12) que se cargó en \"Archivos seguros\" para instalarlo en el agente de macOS.",
+ "loc.input.label.certPwd": "Contraseña de certificado (P12)",
+ "loc.input.help.certPwd": "Contraseña del certificado de Apple (.p12). Use una nueva variable de compilación con el bloqueo habilitado en la pestaña \"Variables\" para cifrar este valor.",
+ "loc.input.label.keychain": "Cadena de claves",
+ "loc.input.help.keychain": "Seleccione la cadena de claves en la que se va a instalar el certificado de Apple. Para compilaciones hospedadas por Microsoft, use \"Temporary Keychain\". Una cadena de claves temporal siempre se elimina una vez completada la compilación o la versión.",
+ "loc.input.label.keychainPassword": "Contraseña de cadena de claves",
+ "loc.input.help.keychainPassword": "Contraseña para desbloquear la cadena de claves. Use una nueva variable de compilación con el bloqueo habilitado en la pestaña \"Variables\" para cifrar este valor.",
+ "loc.input.label.customKeychainPath": "Ruta de acceso a cadena de claves personalizada",
+ "loc.input.help.customKeychainPath": "Ruta de acceso completa a un archivo de cadena de claves personalizada. Si la cadena de claves no existe, se crea.",
+ "loc.input.label.deleteCert": "Eliminar certificado de cadena de claves",
+ "loc.input.help.deleteCert": "Seleccione esta opción para eliminar el certificado de la cadena de claves una vez completada la compilación o la versión.",
+ "loc.input.label.deleteCustomKeychain": "Eliminar cadena de claves personalizada",
+ "loc.input.help.deleteCustomKeychain": "Seleccione esta opción para eliminar la cadena de claves personalizada del agente una vez completada la compilación o la versión.",
+ "loc.input.label.signingIdentity": "Identidad de firma de certificado",
+ "loc.input.help.signingIdentity": "Nombre común del firmante en el certificado de firma. Si se deja en blanco, se intentará analizar el nombre común.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Configurar la ACL de partition_id para la clave privada importada",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "Si es true, establece la ACL de partition_id para la clave privada importada, por lo que codesign no le pedirá que use la clave para firmar. Esto no es necesario para las cadenas de claves temporales, al menos en MacOS High Sierra. Consulte el [vínculo](http://www.openradar.me/28524119) para obtener más detalles.",
+ "loc.messages.INVALID_P12": "No se encuentran el hash SHA1 y el nombre común del certificado. Compruebe que este es un certificado P12 válido.",
+ "loc.messages.NoP12PwdWarning": "No se ha proporcionado ninguna contraseña P12. Si el archivo P12 requiere una contraseña, el procedimiento recomendado es proporcionarla como variable de canalización y marcarla como secreta al habilitar el icono de bloqueo.",
+ "loc.messages.P12PrivateKeyNameNotFound": "No se pudo identificar el nombre de la clave privada: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Se omite la asignación de ACL partition_id de cadena de claves innecesaria en este sistema operativo anterior. El comando de seguridad \"set-key-partition-list\" se introdujo en macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Error al establecer la lista ACL partition_id para la clave privada. Compruebe que la \"Contraseña de cadena de claves\" es correcta o use un valor de \"Temporary Keychain\" en su lugar.",
+ "loc.messages.InstallRequiresMac": "Para instalar un certificado de Apple, se requiere un agente de macOS. Apple no admite la instalación de certificados de Apple en Linux o Windows.",
+ "loc.messages.CertNotValidYetError": "El certificado \"%s\" (huella digital %s) no es válido hasta el %s.",
+ "loc.messages.CertExpiredError": "El certificado \"%s\" (huella digital %s) expiró el %s."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..237bb260be75
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Installer le certificat Apple",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Installer le certificat Apple nécessaire pour effectuer une build sur une machine d'agent macOS",
+ "loc.instanceNameFormat": "Installer un certificat Apple",
+ "loc.releaseNotes": "Corrige les plantages de codesign sur un agent autohébergé. Un mot de passe de trousseau est désormais obligatoire pour permettre l'utilisation de 'Trousseau par défaut' ou 'Trousseau personnalisé'. Les builds hébergées par Microsoft doivent utiliser le 'Trousseau temporaire'.",
+ "loc.group.displayName.advanced": "Avancé",
+ "loc.input.label.certSecureFile": "Certificat (P12)",
+ "loc.input.help.certSecureFile": "Sélectionnez le certificat (.p12) chargé sur 'Fichiers sécurisés' pour installer l'agent macOS.",
+ "loc.input.label.certPwd": "Mot de passe du certificat (P12)",
+ "loc.input.help.certPwd": "Mot de passe du certificat Apple (.p12). Pour chiffrer cette valeur, utilisez une nouvelle variable de build en activant son verrou sous l'onglet Variables.",
+ "loc.input.label.keychain": "Trousseau",
+ "loc.input.help.keychain": "Sélectionnez le trousseau dans lequel installer le certificat Apple. Pour les builds hébergées par Microsoft, utilisez le 'Trousseau temporaire'. Un trousseau temporaire est toujours supprimé, une fois la build ou la mise en production achevée.",
+ "loc.input.label.keychainPassword": "Mot de passe du trousseau",
+ "loc.input.help.keychainPassword": "Mot de passe permettant de déverrouiller le trousseau. Pour chiffrer cette valeur, utilisez une nouvelle variable de build en activant son verrou sous l'onglet Variables.",
+ "loc.input.label.customKeychainPath": "Chemin du trousseau personnalisé",
+ "loc.input.help.customKeychainPath": "Chemin complet d'un fichier de trousseau personnalisé. Le trousseau est créé, s'il n'existe pas déjà.",
+ "loc.input.label.deleteCert": "Supprimer le certificat du trousseau",
+ "loc.input.help.deleteCert": "Sélectionnez cette option pour supprimer le certificat du trousseau, une fois la build ou la mise en production effectuée.",
+ "loc.input.label.deleteCustomKeychain": "Supprimer le trousseau personnalisé",
+ "loc.input.help.deleteCustomKeychain": "Sélectionnez cette option pour supprimer le trousseau personnalisé de l'agent, une fois la build ou la mise en production effectuée.",
+ "loc.input.label.signingIdentity": "Identité de signature du certificat",
+ "loc.input.help.signingIdentity": "Nom commun du sujet dans le certificat de signature. Le nom commun fait l'objet d'une tentative d'analyse, si cette valeur reste vide.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Configurer partition_id liste de contrôle d’accès pour la clé privée importée",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "Si la valeur est true, définit la liste de contrôle d’accès partition_id pour la clé privée importée. Codesign n’invite donc pas à utiliser la clé pour la signature. Ceci n’est pas nécessaire pour les trousseaux temporaires, au moins sur MacOS High Sierra. Pour plus d’informations, consultez le [link](http://www.openradar.me/28524119).",
+ "loc.messages.INVALID_P12": "Le hachage du certificat SHA1 et le nom commun (CN) sont introuvables. Vérifiez qu'il s'agit d'un certificat P12 valide.",
+ "loc.messages.NoP12PwdWarning": "Aucun mot de passe P12 n'a été fourni. Si le fichier P12 nécessite un mot de passe, il est recommandé de le fournir sous forme de variable de pipeline et de le marquer comme étant secret en activant l'icône de verrouillage.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Échec de l'identification du nom de la clé privée : %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Les affectations inutiles d'ACL de partition_id d'un trousseau sont ignorées sur cet ancien système d'exploitation. La commande de sécurité 'set-key-partition-list' a été introduite dans macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Erreur durant la définition de l'ACL de partition_id pour la clé privée. Vérifiez que le 'Mot de passe du trousseau' est correct, ou utilisez un 'Trousseau temporaire' à la place.",
+ "loc.messages.InstallRequiresMac": "L'installation du certificat Apple nécessite un agent macOS. L'installation de certificats Apple sur Linux ou Windows n'est pas prise en charge par Apple.",
+ "loc.messages.CertNotValidYetError": "Le certificat \"%s\" (empreinte digitale : %s) est non valide avant %s",
+ "loc.messages.CertExpiredError": "Le certificat \"%s\" (empreinte digitale : %s) est arrivé à expiration le %s"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/it-IT/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..dec76bd33c0c
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Installa certificato Apple",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Installa un certificato Apple necessario per compilare in un computer agente macOS",
+ "loc.instanceNameFormat": "Installa un certificato Apple",
+ "loc.releaseNotes": "Correzione del problema di blocco della firma del codice in un agente self-hosted. Per usare `Keychain predefinito` o `Keychain personalizzato` è necessaria una password del keychain. Con le compilazioni ospitate da Microsoft è necessario usare `Keychain temporaneo`.",
+ "loc.group.displayName.advanced": "Avanzate",
+ "loc.input.label.certSecureFile": "Certificato (P12)",
+ "loc.input.help.certSecureFile": "Consente di selezionare il certificato (con estensione p12) caricato in `File protetti` da installare nell'agente macOS.",
+ "loc.input.label.certPwd": "Password certificato (P12)",
+ "loc.input.help.certPwd": "Password del certificato Apple (con estensione p12). Per crittografare questo valore, usare una nuova variabile di compilazione con il relativo blocco abilitato nella scheda `Variabili`.",
+ "loc.input.label.keychain": "Keychain",
+ "loc.input.help.keychain": "Consente di selezionare il keychain in cui installare il certificato Apple. Per le compilazioni ospitate da Microsoft usare `Keychain temporaneo`. Un keychain temporaneo verrà sempre eliminato al completamento della compilazione o della versione.",
+ "loc.input.label.keychainPassword": "Password del portachiavi",
+ "loc.input.help.keychainPassword": "Password per sbloccare il keychain. Per crittografare questo valore, usare una nuova variabile di compilazione con il relativo blocco abilitato nella scheda `Variabili`.",
+ "loc.input.label.customKeychainPath": "Percorso del portachiavi personalizzato",
+ "loc.input.help.customKeychainPath": "Percorso completo di un file di keychain personalizzato. Se non esiste, il keychain verrà creato.",
+ "loc.input.label.deleteCert": "Elimina il certificato dal portachiavi",
+ "loc.input.help.deleteCert": "Selezionare questa opzione per eliminare il certificato dal keychain al completamento della compilazione o della versione.",
+ "loc.input.label.deleteCustomKeychain": "Elimina il portachiavi personalizzato",
+ "loc.input.help.deleteCustomKeychain": "Selezionare questa opzione per eliminare il keychain personalizzato dall'agente al completamento della compilazione o della versione.",
+ "loc.input.label.signingIdentity": "Identità di firma del certificato",
+ "loc.input.help.signingIdentity": "Nome comune del soggetto nel certificato di firma. Verrà eseguito un tentativo di analisi del nome comune se viene lasciato vuoto.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Configurare partition_id ACL per la chiave privata importata",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "Se true- imposta l'ACL partition_id per la chiave privata importata, codesign non richiederà l'uso della chiave per la firma. Questa operazione non è necessaria per i keychain temporanei, almeno in MacOS High Sierra. Per altri dettagli, vedere il [link] (http://www.openradar.me/28524119).",
+ "loc.messages.INVALID_P12": "L'hash SHA1 e il nome comune (CN) del certificato non sono stati trovati. Verificare che si tratti di un certificato P12 valido.",
+ "loc.messages.NoP12PwdWarning": "Non è stata fornita alcuna password P12. Se per il file P12 è necessaria una password, è consigliabile fornirla come variabile di pipeline e contrassegnarla come segreta abilitando l'icona del lucchetto.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Non è stato possibile identificare il nome della chiave privata: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "L'assegnazione ACL partition_id non necessaria del keychain verrà ignorata in questo sistema operativo meno recente. Il comando di sicurezza 'set-key-partition-list' è stato introdotto in macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Si è verificato un errore durante l'impostazione dell'ACL partition_id per la chiave privata. Verificare che il valore di `Password keychain` sia corretto oppure usare `Keychain temporaneo` instead.",
+ "loc.messages.InstallRequiresMac": "Per installare un certificato Apple, è richiesto un agente macOS. L'installazione di certificati Apple in Linux o Windows non è supportata da Apple.",
+ "loc.messages.CertNotValidYetError": "Il certificato \"%s\" (impronta digitale: %s) non è valido fino al giorno %s",
+ "loc.messages.CertExpiredError": "Il certificato \"%s\" (impronta digitale: %s) è scaduto il giorno %s"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..e9425e5f3c9c
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Apple 証明書のインストール",
+ "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "macOS エージェント マシン上でビルドを行うために必要な Apple 証明書をインストールします",
+ "loc.instanceNameFormat": "Apple 証明書のインストール",
+ "loc.releaseNotes": "セルフ ホステッド エージェントでの codesign のハングを修正します。`Default Keychain` または `Custom Keychain` を使用するにはキーチェーン パスワードが必須になりました。Microsoft によってホストされるビルドでは、`Temporary Keychain` を使用します。",
+ "loc.group.displayName.advanced": "詳細設定",
+ "loc.input.label.certSecureFile": "証明書 (P12)",
+ "loc.input.help.certSecureFile": "macOS エージェントにインストールするために [セキュア ファイル] にアップロードした証明書 (.p12) を選択します。",
+ "loc.input.label.certPwd": "証明書 (P12) のパスワード",
+ "loc.input.help.certPwd": "Apple 証明書 (.p12) に対するパスワード。この値を暗号化するには、新しいビルド変数を使い、[変数] タブで変数のロックを有効にします。",
+ "loc.input.label.keychain": "キーチェーン",
+ "loc.input.help.keychain": "Apple 証明書をインストールするキーチェーンを選択します。Microsoft がホストしているビルドの場合は、'一時キーチェーン' を使用してください。一時キーチェーンは、ビルドまたはリリースが完了するたびに削除されます。",
+ "loc.input.label.keychainPassword": "キーチェーンのパスワード",
+ "loc.input.help.keychainPassword": "キーチェーンをロック解除するためのパスワード。この値を暗号化するには、新しいビルド変数を使い、[変数] タブで変数のロックを有効にします。",
+ "loc.input.label.customKeychainPath": "カスタム キーチェーン パス",
+ "loc.input.help.customKeychainPath": "カスタム キーチェーン ファイルへの完全なパス。キーチェーンが存在しない場合は、作成されます。",
+ "loc.input.label.deleteCert": "キーチェーンからの証明書の削除",
+ "loc.input.help.deleteCert": "ビルドまたはリリースが完了した後に証明書をキーチェーンから削除するには、これを選択します。",
+ "loc.input.label.deleteCustomKeychain": "カスタム キーチェーンの削除",
+ "loc.input.help.deleteCustomKeychain": "ビルドまたはリリースが完了した後にカスタム キーチェーンをエージェントから削除するには、これを選択します。",
+ "loc.input.label.signingIdentity": "証明書の署名 ID",
+ "loc.input.help.signingIdentity": "署名証明書の件名の共通名。これが空のままの場合、共通名の解析を試行します。",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "インポートされた秘密キーの partition_id ACL を設定する",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "true の場合 - インポートされた秘密キーの partition_id ACL を設定するため、codesign は署名にキーの使用を求めません。これは、少なくとも MacOS High Sierra 上の一時的なキーチェーンには必要ありません。詳細については、[link] (http://www.openradar.me/28524119) を参照してください。",
+ "loc.messages.INVALID_P12": "証明書の SHA1 ハッシュと共通名 (CN) が見つかりません。証明書が有効な P12 であることを確認してください。",
+ "loc.messages.NoP12PwdWarning": "P12 パスワードが指定されていません。P12 ファイルがパスワードを必要とする場合、パイプライン変数としてそれを指定し、ロック アイコンを有効化して秘密としてマークするのが最善です。",
+ "loc.messages.P12PrivateKeyNameNotFound": "次の秘密キー名を識別できませんでした。%s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "この古い OS で不必要なキーチェーン partition_id ACL の代入をスキップします。セキュリティ コマンド 'set-key-partition-list' が、macOS Sierra (10.12) で導入されました。",
+ "loc.messages.SetKeyPartitionListCommandFailed": "秘密キーへの partition_id ACL の設定でエラーが発生しました。`Keychain password` が正しいことを確認するか、代わりに `Temporary Keychain` を使用します。",
+ "loc.messages.InstallRequiresMac": "Apple の証明書のインストールには、macOS エージェントが必要です。Apple は、Linux または Windows での Apple の証明書のインストールをサポートしていません。",
+ "loc.messages.CertNotValidYetError": "証明書 \"%s\" (フィンガープリント: %s) は %s まで有効ではありません",
+ "loc.messages.CertExpiredError": "証明書 \"%s\" (フィンガープリント: %s) の有効期限が %s に切れました"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..6d18d43b343e
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Apple 인증서 설치",
+ "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "빌드에 필요한 Apple 인증서를 macOS 에이전트 머신에 설치합니다.",
+ "loc.instanceNameFormat": "Apple 인증서 설치",
+ "loc.releaseNotes": "자체 호스팅 에이전트의 codesign 중단을 수정합니다. 이제 '기본 키 집합' 또는 '사용자 지정 키 집합'을 사용하려면 키 집합 암호가 필요합니다. Microsoft 호스팅 빌드는 '임시 키 집합'을 사용해야 합니다.",
+ "loc.group.displayName.advanced": "고급",
+ "loc.input.label.certSecureFile": "인증서(P12)",
+ "loc.input.help.certSecureFile": "macOS 에이전트에 설치할 '보안 파일'에 업로드된 인증서(.p12)를 선택합니다.",
+ "loc.input.label.certPwd": "인증서(P12) 암호",
+ "loc.input.help.certPwd": "Apple 인증서(.p12)의 암호입니다. 이 값을 암호화하려면 `변수` 탭에서 해당 잠금을 사용하도록 설정한 상태로 새 빌드 변수를 사용합니다.",
+ "loc.input.label.keychain": "키 집합",
+ "loc.input.help.keychain": "설치할 Apple 인증서가 있는 키 집합을 선택합니다. Microsoft에 호스트된 빌드의 경우 '임시 키 집합'을 사용합니다. 임시 키 집합은 빌드 또는 릴리스가 완료된 후 항상 삭제됩니다.",
+ "loc.input.label.keychainPassword": "키 집합 암호",
+ "loc.input.help.keychainPassword": "키 집합의 잠금을 해제할 암호입니다. 이 값을 암호화하려면 '변수' 탭에서 해당 잠금을 사용하도록 설정한 상태로 새 빌드 변수를 사용합니다.",
+ "loc.input.label.customKeychainPath": "사용자 정의 키 집합 경로",
+ "loc.input.help.customKeychainPath": "사용자 지정 키 집합 파일의 전체 경로입니다. 키 집합이 없으면 만들어집니다.",
+ "loc.input.label.deleteCert": "키 집합에서 인증서 삭제",
+ "loc.input.help.deleteCert": "빌드 또는 릴리스가 완료된 후 키 집합에서 인증서를 삭제하려면 선택합니다.",
+ "loc.input.label.deleteCustomKeychain": "사용자 정의 키 집합 삭제",
+ "loc.input.help.deleteCustomKeychain": "빌드 또는 릴리스가 완료된 후 에이전트에서 사용자 정의 키 집합을 삭제하려면 선택합니다.",
+ "loc.input.label.signingIdentity": "인증서 서명 ID",
+ "loc.input.help.signingIdentity": "서명 인증서의 주체 일반 이름입니다. 비워 두면 일반 이름을 구문 분석하려고 합니다.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "가져온 프라이빗 키에 대한 partition_id ACL 설정",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "true이면 가져온 프라이빗 키에 대한 partition_id ACL을 설정하므로 codesign은 서명에 키를 사용하라는 메시지를 표시하지 않습니다. 최소한 MacOS High Sierra에서는 임시 키 집합에 필요하지 않습니다. 자세한 내용은 [link](http://www.openradar.me/28524119)를 참조하세요.",
+ "loc.messages.INVALID_P12": "인증서 SHA1 해시 및 CN(일반 이름)을 찾을 수 없습니다. 인증서가 올바른 P12인지 확인하세요.",
+ "loc.messages.NoP12PwdWarning": "P12 암호를 제공하지 않았습니다. P12 파일에 암호가 필요한 경우 파이프라인 변수로 제공하고 잠금 아이콘을 사용하여 비밀로 표시하는 것이 좋습니다.",
+ "loc.messages.P12PrivateKeyNameNotFound": "프라이빗 키 이름을 확인하지 못했습니다. %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "이 이전 OS에 있는 불필요한 키 집합 partition_id ACL 할당을 건너뜁니다. 보안 명령 'set-key-partition-list'는 macOS Sierra(10.12)에서 도입되었습니다.",
+ "loc.messages.SetKeyPartitionListCommandFailed": "프라이빗 키의 partition_id ACL을 설정하는 중 오류가 발생했습니다. '키 집합 암호'가 올바른지 확인하거나, '임시 키 집합'을 대신 사용하세요.",
+ "loc.messages.InstallRequiresMac": "Apple 인증서를 설치하려면 macOS 에이전트가 필요합니다. Linux 또는 Windows에는 Apple 인증서를 설치할 수 없습니다.",
+ "loc.messages.CertNotValidYetError": "\"%s\" 인증서(지문: %s)는 %s까지 유효하지 않습니다.",
+ "loc.messages.CertExpiredError": "\"%s\" 인증서(지문: %s)가 %s에 만료되었습니다."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..d4e085563ecb
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Установить сертификат Apple",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Установить сертификат Apple, необходимый для сборки, на компьютер агента macOS",
+ "loc.instanceNameFormat": "Установить сертификат Apple",
+ "loc.releaseNotes": "Исправляет проблему с зависанием codesign в локальном агенте. Пароль цепочки ключей теперь требуется для использования цепочки ключей по умолчанию или пользовательской цепочки ключей. Сборки, размещенные на сервере Майкрософт, должны использовать временную цепочку ключей.",
+ "loc.group.displayName.advanced": "Дополнительно",
+ "loc.input.label.certSecureFile": "Сертификат (P12)",
+ "loc.input.help.certSecureFile": "Выберите сертификат (.p12), который был отправлен в раздел \"Защитные файлы\" для установки на агенте macOS.",
+ "loc.input.label.certPwd": "Пароль сертификата (P12)",
+ "loc.input.help.certPwd": "Пароль сертификата Apple (.p12). Для шифрования этого значения используйте новую переменную сборки, включив для нее блокировку на вкладке \"Переменные\".",
+ "loc.input.label.keychain": "Цепочка ключей",
+ "loc.input.help.keychain": "Выберите цепочку ключей, в которой необходимо установить сертификат Apple. Для сборок, размещенных в Майкрософт, используйте временную цепочку ключей. Временная цепочка ключей всегда удаляется после завершения сборки или выпуска.",
+ "loc.input.label.keychainPassword": "Пароль цепочки ключей",
+ "loc.input.help.keychainPassword": "Пароль для снятия блокировки цепочки ключей. Для шифрования этого значения используйте новую переменную сборки, включив для нее блокировку на вкладке \"Переменные\".",
+ "loc.input.label.customKeychainPath": "Путь к пользовательской цепочке ключей",
+ "loc.input.help.customKeychainPath": "Полный путь к файлу настраиваемой цепочки ключей. Если цепочки ключей не существует, она будет создана.",
+ "loc.input.label.deleteCert": "Удалить сертификат из цепочки ключей",
+ "loc.input.help.deleteCert": "Выберите этот параметр, чтобы удалить сертификат из цепочки ключей после завершения сборки или после создания выпуска.",
+ "loc.input.label.deleteCustomKeychain": "Удалить пользовательскую цепочку ключей",
+ "loc.input.help.deleteCustomKeychain": "Выберите этот параметр, чтобы удалить настраиваемую цепочку ключей из агента после завершения сборки или создания выпуска.",
+ "loc.input.label.signingIdentity": "Удостоверение подписывания сертификата",
+ "loc.input.help.signingIdentity": "Общее имя субъекта в сертификате для подписи. Если это поле оставить пустым, будет предпринята попытка проанализировать общее имя.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Настройка списка управления доступом partition_id для импортированного закрытого ключа",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "При значении \"true\" устанавливает список управления доступом partition_id для импортированного закрытого ключа, поэтому codesign не будет запрашивать ключ для подписи. Это не требуется для временных цепочек ключей, по крайней мере в MacOS High Sierra. Подробнее см. [здесь] (http://www.openradar.me/28524119).",
+ "loc.messages.INVALID_P12": "Не удается найти хэш SHA1 и общее имя сертификата. Убедитесь, что указан допустимый сертификат P12.",
+ "loc.messages.NoP12PwdWarning": "Не предоставлен пароль P12. Если файл P12 требует пароля, рекомендуется предоставить его в виде переменной конвейера, пометив ее как секретную с помощью значка блокировки.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Не удалось определить имя закрытого ключа: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Пропускается назначение ACL partition_id цепочки ключей, которое не требуется для этой старой версии ОС. Команда системы безопасности set-key-partition-list появилась в macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Ошибка при установке ACL partition_id для закрытого ключа. Проверьте правильность пароля цепочки ключей или используйте временную цепочку ключей.",
+ "loc.messages.InstallRequiresMac": "Для установки сертификата Apple требуется агент macOS. Установка сертификатов Apple в Linux или Windows не поддерживается Apple.",
+ "loc.messages.CertNotValidYetError": "Сертификат \"%s\" (отпечаток: %s) является недействительным до %s",
+ "loc.messages.CertExpiredError": "Срок действия сертификата \"%s\" (отпечаток: %s) истек %s"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..6f62240676f7
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "安装 Apple 证书",
+ "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "将生成所需的 Apple 证书安装到 macOS 代理计算机上",
+ "loc.instanceNameFormat": "安装 Apple 证书",
+ "loc.releaseNotes": "修复程序 codesign 在自托管代理上挂起。密钥链密码现在需要使用 `Default Keychain` 或 `Custom Keychain`。Microsoft 托管生成应使用 `Temporary Keychain`。",
+ "loc.group.displayName.advanced": "高级",
+ "loc.input.label.certSecureFile": "证书(P12)",
+ "loc.input.help.certSecureFile": "选择已上传至“安全文件”的证书(.p12)以在 macOS 代理上进行安装。",
+ "loc.input.label.certPwd": "证书(P12)密码",
+ "loc.input.help.certPwd": "Apple 证书(.p12)的密码。使用新生成变量加密此值,在“变量”选项卡上启用锁定。",
+ "loc.input.label.keychain": "密钥链",
+ "loc.input.help.keychain": "选择要在其中安装 Apple 证书的密钥链。对于 Microsoft 托管的生成,请使用“临时密钥链”。生成或发布完成后始终会删除临时密钥链。",
+ "loc.input.label.keychainPassword": "钥匙链密码",
+ "loc.input.help.keychainPassword": "用于解锁密钥链的密码。使用在“变量”选项卡上启用了锁定的新的生成变量来加密该值。",
+ "loc.input.label.customKeychainPath": "自定义密钥链路径",
+ "loc.input.help.customKeychainPath": "自定义密钥链文件的完整路径。如果不存在,则会创建密钥链。",
+ "loc.input.label.deleteCert": "从密钥链删除证书",
+ "loc.input.help.deleteCert": "生成或发布完成后选择从密钥链删除此证书。",
+ "loc.input.label.deleteCustomKeychain": "删除自定义密钥链",
+ "loc.input.help.deleteCustomKeychain": "生成或发布完成后选择从代理删除此自定义密钥链。",
+ "loc.input.label.signingIdentity": "证书签名标识",
+ "loc.input.help.signingIdentity": "签名证书中的使用者公用名。如果公用名为空,将尝试对其进行分析。",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "为导入的私钥设置 partition_id ACL",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "如果为 true - 为导入的私钥设置 partition_id ACL,因此 codesign 不会提示使用密钥进行签名。这对于临时密钥链来说不是必需的,至少在 MacOS High Sierra 上是这样。有关更多详细信息,请参阅 [link](http://www.openradar.me/28524119)。",
+ "loc.messages.INVALID_P12": "无法找到证书 SHA1 哈希和公用名(CN)。请验证证书是否是有效的 P12。",
+ "loc.messages.NoP12PwdWarning": "未提供任何 P12 密码。如果 P12 文件需要密码,最佳做法是以管道变量的形式提供,并通过启用锁定图标将其标记为机密。",
+ "loc.messages.P12PrivateKeyNameNotFound": "无法标识私钥名称: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "正在跳过此较早的 OS 上不需要的密钥链 partition_id ACL 分配。macOS Sierra (10.12)中引入了安全命令 \"set-key-partition-list\"。 ",
+ "loc.messages.SetKeyPartitionListCommandFailed": "设置私钥的 partition_id ACL 时出错。验证“密钥链密码”是否正确,或改用“临时密钥链”。",
+ "loc.messages.InstallRequiresMac": "安装 Apple 证书需要 macOS 代理。Apple 不支持在 Linux 或 Windows 上安装 Apple 证书。",
+ "loc.messages.CertNotValidYetError": "证书“%s”(指纹: %s)在 %s之前无效",
+ "loc.messages.CertExpiredError": "证书“%s”(指纹: %s)已在 %s过期"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..a498f9d727c8
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "安裝 Apple 憑證",
+ "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "在 macOS 代理程式電腦上執行建置作業必須安裝 Apple 憑證",
+ "loc.instanceNameFormat": "安裝 Apple 憑證",
+ "loc.releaseNotes": "修正 codesign 在自我裝載代理程式停止回應。現在必須有金鑰鏈密碼,才能使用 [預設金鑰鏈] 或 [自訂金鑰鏈]。Microsoft 裝載的組建應使用 [暫存金鑰鏈]。",
+ "loc.group.displayName.advanced": "進階",
+ "loc.input.label.certSecureFile": "憑證 (P12)",
+ "loc.input.help.certSecureFile": "選取已上傳到 [安全檔案] 的憑證 (.p12),以安裝在 macOS 代理程式上。",
+ "loc.input.label.certPwd": "憑證 (P12) 密碼",
+ "loc.input.help.certPwd": "Apple 憑證 (.p12) 的密碼。請使用已在 [變數] 索引標籤上啟用鎖定的新組建變數來加密這個值。",
+ "loc.input.label.keychain": "Keychain",
+ "loc.input.help.keychain": "請選取要在其中安裝 Apple 憑證的 Keychain。若為 Microsoft 裝載的組建,請使用 `Temporary Keychain`。暫存 Keychain 一律會在建置或發行完成後刪除。",
+ "loc.input.label.keychainPassword": "金鑰鏈密碼",
+ "loc.input.help.keychainPassword": "用以解開金鑰鏈的密碼。請使用 [變數] 索引標籤上已啟用鎖定的新組建變數,來為這個值加密。",
+ "loc.input.label.customKeychainPath": "自訂金鑰鏈路徑",
+ "loc.input.help.customKeychainPath": "自訂 keychain 檔案的完整路徑。如果不存在,則會建立此 keychain。",
+ "loc.input.label.deleteCert": "從金鑰鏈刪除憑證",
+ "loc.input.help.deleteCert": "選取此選項可在建置或發行完成之後,從 keychain 刪除憑證。",
+ "loc.input.label.deleteCustomKeychain": "刪除自訂金鑰鏈",
+ "loc.input.help.deleteCustomKeychain": "選取此選項可在建置或發行完成之後,從代理程式刪除自訂 keychain。",
+ "loc.input.label.signingIdentity": "憑證簽署身分識別",
+ "loc.input.help.signingIdentity": "簽署憑證中主體的一般名稱。若保留為空白,將會嘗試剖析一般名稱。",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "為匯入的私密金鑰設定 partition_id ACL",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "如果為 true - 為匯入的私密金鑰設定 partition_id ACL,因此 codesign 不會提示使用金鑰用於簽署。暫時金鑰鏈不需要此動作,至少在 MacOS High Sierra 上。如需詳細資料,請參閱 [連結](http://www.openradar.me/28524119)。",
+ "loc.messages.INVALID_P12": "找不到憑證 SHA1 雜湊和一般名稱 (CN)。請確認憑證是有效的 P12。",
+ "loc.messages.NoP12PwdWarning": "未提供任何 P12 密碼。如果 P12 檔需要密碼,最佳做法是以管線變數形式提供,並透過啟用鎖定圖示將其標示為祕密。",
+ "loc.messages.P12PrivateKeyNameNotFound": "無法識別私密金鑰名稱: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "正在此舊版 OS 上跳過不需要的 keychain partition_id ACL 指派。安全性命令 'set-key-partition-list' 於 macOS Sierra (10.12) 導入。",
+ "loc.messages.SetKeyPartitionListCommandFailed": "設定私密金鑰的 partition_id ACL 時發生錯誤。請驗證 [金鑰鏈密碼] 正確,或改用 [臨時金鑰鏈]。",
+ "loc.messages.InstallRequiresMac": "必須有 macOS 代理程式才能安裝 Apple Certificate。Apple 不支援在 Linux 或 Windows 上安裝 Apple Certificate。",
+ "loc.messages.CertNotValidYetError": "憑證 \"%s\" (指紋: %s) 於 %s 後才會生效",
+ "loc.messages.CertExpiredError": "憑證 \"%s\" (指紋: %s) 於 %s 過期"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0.ts b/_generated/InstallAppleCertificateV2/Tests/L0.ts
new file mode 100644
index 000000000000..5118dd724ef5
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0.ts
@@ -0,0 +1,187 @@
+import fs = require('fs');
+import assert = require('assert');
+import path = require('path');
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('InstallAppleCertificate Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000);
+ before(() => {
+ });
+
+ after(() => {
+ });
+
+ it('Defaults: install cert in temporary keychain', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallTempKeychain.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain'),
+ 'certificate should have been installed in the keychain');
+ assert(tr.ran('/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain'),
+ 'temp keychain should have been created.');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: install cert with empty password in temporary keychain', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallCertWithEmptyPassword.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain'),
+ 'certificate should have been installed in the keychain');
+ assert(tr.ran('/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain'),
+ 'temp keychain should have been created.');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: delete temporary keychain after build', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0DeleteTempKeychain.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security delete-keychain /build/temp/ios_signing_temp.keychain'),
+ 'keychain should have been deleted');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: install certificate in default keychain before build', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallDefaultKeychain.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain'),
+ 'certificate should have been installed in the default keychain');
+ assert(!tr.ran('/usr/bin/security create-keychain -p mykeychainPwd /usr/lib/login.keychain'), 'login keychain should not be created')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: install certificate in default keychain before build with openssl args', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallDefaultKeychainWithArgs.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain'),
+ 'certificate should have been installed in the default keychain');
+ assert(!tr.ran('/usr/bin/security create-keychain -p mykeychainPwd /usr/lib/login.keychain'), 'login keychain should not be created')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+
+ it('Defaults: delete certificate from default keychain after build', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0DeleteCertDefaultKeychain.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(!tr.ran('/usr/bin/security delete-keychain /usr/lib/login.keychain'),
+ 'defualt keychain should not have been deleted');
+ assert(tr.ran('/usr/bin/security delete-certificate -Z SHA1HASHOFP12CERTIFICATE /usr/lib/login.keychain'),
+ 'certificate should have been deleted from the default keychain.');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: with user input CN do not parse for it', (done: Mocha.Done) => {
+ // there is no way to verify the variable value as it is a 'side effect'
+ // this test just verifies that with user set CN, the task still works
+ let tp: string = path.join(__dirname, 'L0UserSupplyCN.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain'),
+ 'certificate should have been installed in the default keychain');
+ assert(!tr.ran('/usr/bin/security create-keychain -p mykeychainPwd /usr/lib/login.keychain'), 'login keychain should not be created')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+ done();
+ });
+
+ it('Installs certificate valid for a brief time', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0CertificateValidForABriefTime.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Fails on expired certificate', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0FailOnExpiredCertificate.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.failed, 'task should have failed');
+ assert(tr.errorIssues.length > 0, 'should have written to stderr');
+ assert(tr.errorIssues[0].indexOf('Error: loc_mock_CertExpiredError') >= 0, 'error message should match expected');
+
+ done();
+ });
+
+ it('Fails on windows', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0FailOnWindows.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.failed, 'task should have failed');
+ assert(tr.errorIssues.length > 0, 'should have written to stderr');
+ assert(tr.errorIssues[0].indexOf('Error: loc_mock_InstallRequiresMac') >= 0, 'error message should match expected');
+
+ done();
+ });
+
+ it('postexecution should not fail for errors', function (done: Mocha.Done) {
+ let tp: string = path.join(__dirname, 'L0ErrorsInPostExecutionJob.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.succeeded, 'postexecutionjob should have succeeded with warnings even when there are errors.');
+ assert(tr.stdout.indexOf('InstallRequiresMac'), 'warning for macos requirement should be shown.');
+
+ done();
+ });
+
+ it('Defaults: install cert in temporary keychain - skip partition_id ACL', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallTempKeychainSkipPartitionIdACL.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain'),
+ 'certificate should have been installed in the keychain');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ assert(tr.stdout.indexOf('Setting the partition_id ACL') < 0, 'Setting the partition_id ACL should be skipped if setUpPartitionIdACLForPrivateKey=true');
+ done();
+ });
+});
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0CertificateValidForABriefTime.ts b/_generated/InstallAppleCertificateV2/Tests/L0CertificateValidForABriefTime.ts
new file mode 100644
index 000000000000..32fb94017772
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0CertificateValidForABriefTime.ts
@@ -0,0 +1,116 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+// Have our certificate be valid only for a very short window of time. This confirms our date comparisons properly
+// account for timezones. Someone in a timezone ahead of UTC shouldn't have to wait to use a newly created certificate.
+
+// 10 minutes ago.
+const notBefore: Date = new Date(new Date().getTime() - 10 * 60 * 1000);
+
+// 10 minutes from now.
+const notAfter: Date = new Date(new Date().getTime() + 10 * 60 * 1000);
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/build/temp/ios_signing_temp.keychain": false
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": `MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=${toOpensslString(notBefore)}\nnotAfter=${toOpensslString(notAfter)}\n`
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain created"
+ },
+ "/usr/bin/security set-keychain-settings -lut 21600 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain settings"
+ },
+ "/usr/bin/security unlock-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "dumped keychain key"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/user/bin/login.keychain\n/build/temp/ios_signing_temp.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
+// Return a UTC date in this format: "Nov 13 03:37:42 2018 GMT"
+function toOpensslString(datetime: Date): string {
+ const dateSegments: string[] = datetime.toUTCString().split(' ');
+
+ if (dateSegments.length != 6) {
+ throw new Error('Expected 6 segments in the date string');
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toString
+ const date = dateSegments[1];
+ const monthName = dateSegments[2];
+ const year = dateSegments[3];
+ const time = dateSegments[4];
+
+ return `${monthName} ${date} ${time} ${year} GMT`;
+}
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0DeleteCertDefaultKeychain.ts b/_generated/InstallAppleCertificateV2/Tests/L0DeleteCertDefaultKeychain.ts
new file mode 100644
index 000000000000..1d0636ae9000
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0DeleteCertDefaultKeychain.ts
@@ -0,0 +1,49 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('keychain', 'default');
+tr.setInput('deleteCert', 'true');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['VSTS_TASKVARIABLE_APPLE_CERTIFICATE_KEYCHAIN'] = '/usr/lib/login.keychain';
+process.env['VSTS_TASKVARIABLE_APPLE_CERTIFICATE_SHA1HASH'] = 'SHA1HASHOFP12CERTIFICATE';
+process.env['HOME'] = '/users/test';
+
+tr.registerMock('fs', {
+ ...fs,
+ readFileSync: fs.readFileSync,
+ statSync: fs.statSync,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security"
+ },
+ "checkPath": {
+ "/usr/bin/security": true
+ },
+ "exec": {
+ "/usr/bin/security delete-certificate -Z SHA1HASHOFP12CERTIFICATE /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "deleted keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0DeleteTempKeychain.ts b/_generated/InstallAppleCertificateV2/Tests/L0DeleteTempKeychain.ts
new file mode 100644
index 000000000000..e26b4821345e
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0DeleteTempKeychain.ts
@@ -0,0 +1,50 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('keychain', 'temp');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['VSTS_TASKVARIABLE_APPLE_CERTIFICATE_KEYCHAIN'] = '/build/temp/ios_signing_temp.keychain';
+process.env['HOME'] = '/users/test';
+
+tr.registerMock('fs', {
+ ...fs,
+ readFileSync: fs.readFileSync,
+ statSync: fs.statSync,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security"
+ },
+ "exist": {
+ "/build/temp/ios_signing_temp.keychain": true
+ },
+ "checkPath": {
+ "/usr/bin/security": true
+ },
+ "exec": {
+ "/usr/bin/security delete-keychain /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "deleted keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0ErrorsInPostExecutionJob.ts b/_generated/InstallAppleCertificateV2/Tests/L0ErrorsInPostExecutionJob.ts
new file mode 100644
index 000000000000..3e6d9a04f5d2
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0ErrorsInPostExecutionJob.ts
@@ -0,0 +1,32 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'win32';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0FailOnExpiredCertificate.ts b/_generated/InstallAppleCertificateV2/Tests/L0FailOnExpiredCertificate.ts
new file mode 100644
index 000000000000..b2e4d81681ef
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0FailOnExpiredCertificate.ts
@@ -0,0 +1,75 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+// 10 minutes ago. The notAfter date string is generated instead of hardcoded to ensure the positive test,
+// L0CertificateValid.ts, is actually testing expiration times since reading them from the certificate is best effort.
+const expiredDate: Date = new Date(new Date().getTime() - 10 * 60 * 1000);
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": `MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2017 GMT\nnotAfter=${toOpensslString(expiredDate)}\n`
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
+// Return a UTC date in this format: "Nov 13 03:37:42 2018 GMT"
+function toOpensslString(datetime: Date): string {
+ const dateSegments: string[] = datetime.toUTCString().split(' ');
+
+ if (dateSegments.length != 6) {
+ throw new Error('Expected 6 segments in the date string');
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toString
+ const date = dateSegments[1];
+ const monthName = dateSegments[2];
+ const year = dateSegments[3];
+ const time = dateSegments[4];
+
+ return `${monthName} ${date} ${time} ${year} GMT`;
+}
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0FailOnWindows.ts b/_generated/InstallAppleCertificateV2/Tests/L0FailOnWindows.ts
new file mode 100644
index 000000000000..b581eadb1058
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0FailOnWindows.ts
@@ -0,0 +1,32 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'win32';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0InstallCertWithEmptyPassword.ts b/_generated/InstallAppleCertificateV2/Tests/L0InstallCertWithEmptyPassword.ts
new file mode 100644
index 000000000000..814c201e7932
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0InstallCertWithEmptyPassword.ts
@@ -0,0 +1,91 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', '');
+tr.setInput('keychain', 'temp');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/build/temp/ios_signing_temp.keychain": false
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass: | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass: -passout pass:115 | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain created"
+ },
+ "/usr/bin/security set-keychain-settings -lut 21600 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain settings"
+ },
+ "/usr/bin/security unlock-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "private key dump"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/user/bin/login.keychain\n/build/temp/ios_signing_temp.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0InstallDefaultKeychain.ts b/_generated/InstallAppleCertificateV2/Tests/L0InstallDefaultKeychain.ts
new file mode 100644
index 000000000000..af37bae94d89
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0InstallDefaultKeychain.ts
@@ -0,0 +1,83 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'default');
+tr.setInput('keychainPassword', 'mykeychainPwd');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/usr/lib/login.keychain": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security default-keychain": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ },
+ "/usr/bin/security unlock-keychain -p mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "private key dump"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0InstallDefaultKeychainWithArgs.ts b/_generated/InstallAppleCertificateV2/Tests/L0InstallDefaultKeychainWithArgs.ts
new file mode 100644
index 000000000000..5727ec6e6046
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0InstallDefaultKeychainWithArgs.ts
@@ -0,0 +1,84 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'default');
+tr.setInput('keychainPassword', 'mykeychainPwd');
+tr.setInput('opensslPkcsArgs', '-legacy');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/usr/lib/login.keychain": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd -legacy | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd -legacy | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security default-keychain": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ },
+ "/usr/bin/security unlock-keychain -p mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "private key dump"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0InstallTempKeychain.ts b/_generated/InstallAppleCertificateV2/Tests/L0InstallTempKeychain.ts
new file mode 100644
index 000000000000..6fcd8e1baf6b
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0InstallTempKeychain.ts
@@ -0,0 +1,91 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/build/temp/ios_signing_temp.keychain": false
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain created"
+ },
+ "/usr/bin/security set-keychain-settings -lut 21600 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain settings"
+ },
+ "/usr/bin/security unlock-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "dumped keychain key"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/user/bin/login.keychain\n/build/temp/ios_signing_temp.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0InstallTempKeychainSkipPartitionIdACL.ts b/_generated/InstallAppleCertificateV2/Tests/L0InstallTempKeychainSkipPartitionIdACL.ts
new file mode 100644
index 000000000000..bd8e9b272106
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0InstallTempKeychainSkipPartitionIdACL.ts
@@ -0,0 +1,93 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+tr.setInput('setUpPartitionIdACLForPrivateKey', 'true');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/build/temp/ios_signing_temp.keychain": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain created"
+ },
+ "/usr/bin/security set-keychain-settings -lut 21600 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain settings"
+ },
+ "/usr/bin/security unlock-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "dumped keychain key"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/user/bin/login.keychain\n/build/temp/ios_signing_temp.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/L0UserSupplyCN.ts b/_generated/InstallAppleCertificateV2/Tests/L0UserSupplyCN.ts
new file mode 100644
index 000000000000..210009ef6026
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/L0UserSupplyCN.ts
@@ -0,0 +1,84 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certSigningIdentity', 'Testing Signing');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'default');
+tr.setInput('keychainPassword', 'mykeychainPwd');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/usr/lib/login.keychain": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security default-keychain": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ },
+ "/usr/bin/security unlock-keychain -p mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "private key dump"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2/Tests/package-lock.json b/_generated/InstallAppleCertificateV2/Tests/package-lock.json
new file mode 100644
index 000000000000..90797e6bb0da
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/package-lock.json
@@ -0,0 +1,24 @@
+{
+ "name": "vsts-tasks-installapplecertificate-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "10.17.44",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz",
+ "integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/_generated/InstallAppleCertificateV2/Tests/package.json b/_generated/InstallAppleCertificateV2/Tests/package.json
new file mode 100644
index 000000000000..9fa5cc3342f7
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/Tests/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "vsts-tasks-installapplecertificate-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install Apple Certificate Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^10.17.0",
+ "@types/mocha": "^5.2.7"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/_generated/InstallAppleCertificateV2/ThirdPartyNotice.txt b/_generated/InstallAppleCertificateV2/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..76f6688ea160
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/ThirdPartyNotice.txt
@@ -0,0 +1,432 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (InstallAppleCertificateV2) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/mocha (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+3. balanced-match (git://github.com/juliangruber/balanced-match.git)
+4. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+5. concat-map (git://github.com/substack/node-concat-map.git)
+6. minimatch (git://github.com/isaacs/minimatch.git)
+7. mockery (git://github.com/mfncooper/mockery.git)
+8. q (git://github.com/kriskowal/q.git)
+9. semver (git+https://github.com/npm/node-semver.git)
+10. shelljs (git://github.com/arturadib/shelljs.git)
+11. tunnel (git+https://github.com/koichik/node-tunnel.git)
+12. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+13. underscore (git://github.com/jashkenas/underscore.git)
+14. uuid (git+https://github.com/kelektiv/node-uuid.git)
+15. vso-node-api (git+https://github.com/Microsoft/vso-node-api.git)
+16. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git)
+
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
+%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF vso-node-api NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF vsts-task-lib NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/InstallAppleCertificateV2/icon.png b/_generated/InstallAppleCertificateV2/icon.png
new file mode 100644
index 000000000000..5dda42229aad
Binary files /dev/null and b/_generated/InstallAppleCertificateV2/icon.png differ
diff --git a/_generated/InstallAppleCertificateV2/icon.svg b/_generated/InstallAppleCertificateV2/icon.svg
new file mode 100644
index 000000000000..74474e20632b
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/icon.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_generated/InstallAppleCertificateV2/make.json b/_generated/InstallAppleCertificateV2/make.json
new file mode 100644
index 000000000000..a935c9e8b738
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/make.json
@@ -0,0 +1,11 @@
+{
+ "rm": [
+ {
+ "items": [
+ "node_modules/azure-pipelines-tasks-ios-signing-common/node_modules/azure-pipelines-task-lib",
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
+ ],
+ "options": "-Rf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/package-lock.json b/_generated/InstallAppleCertificateV2/package-lock.json
new file mode 100644
index 000000000000..6076c03bc896
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/package-lock.json
@@ -0,0 +1,585 @@
+{
+ "name": "vsts-tasks-installapplecertificate",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "16.11.62",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.62.tgz",
+ "integrity": "sha512-K/ggecSdwAAy2NUW4WKmF4Rc03GKbsfP+k326UWgckoS+Rzd2PaWbjk76dSmqdLQvLTJAO9axiTUJ6488mFsYQ=="
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-ios-signing-common": {
+ "version": "2.227.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-ios-signing-common/-/azure-pipelines-tasks-ios-signing-common-2.227.0.tgz",
+ "integrity": "sha512-Y1FEKwHE/mT4aa37qBUMs78yYLw0FRqxFPE26pA7SSFrIcz1LuaGhDJA3o94AmEAyfJxIk+S61TFMgLkqLM/lQ==",
+ "requires": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ }
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz",
+ "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz",
+ "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz",
+ "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
+ "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/InstallAppleCertificateV2/package.json b/_generated/InstallAppleCertificateV2/package.json
new file mode 100644
index 000000000000..72c3b0577f71
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installapplecertificate",
+ "version": "1.0.0",
+ "description": "Azure Pipelines InstallAppleCertificate Task",
+ "main": "preinstallcert.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^16.11.39",
+ "@types/mocha": "^5.2.7",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0",
+ "azure-pipelines-tasks-ios-signing-common": "2.227.0",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/_generated/InstallAppleCertificateV2/postinstallcert.ts b/_generated/InstallAppleCertificateV2/postinstallcert.ts
new file mode 100644
index 000000000000..8b4a8098cad7
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/postinstallcert.ts
@@ -0,0 +1,39 @@
+import path = require('path');
+import * as tl from 'azure-pipelines-task-lib/task';
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import os = require('os');
+
+async function run() {
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ console.log(tl.loc('InstallRequiresMac'));
+ } else {
+ let keychain: string = tl.getInput('keychain');
+ let keychainPath: string = tl.getTaskVariable('APPLE_CERTIFICATE_KEYCHAIN');
+
+ let deleteCert: boolean = tl.getBoolInput('deleteCert');
+ let hash: string = tl.getTaskVariable('APPLE_CERTIFICATE_SHA1HASH');
+ if (deleteCert && hash) {
+ await sign.deleteCert(keychainPath, hash);
+ }
+
+ let deleteKeychain: boolean = false;
+ if (keychain === 'temp') {
+ deleteKeychain = true;
+ } else if (keychain === 'custom') {
+ deleteKeychain = tl.getBoolInput('deleteCustomKeychain');
+ }
+
+ if (deleteKeychain && keychainPath) {
+ await sign.deleteKeychain(keychainPath);
+ }
+ }
+ } catch (err) {
+ tl.warning(err);
+ }
+}
+
+run();
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/preinstallcert.ts b/_generated/InstallAppleCertificateV2/preinstallcert.ts
new file mode 100644
index 000000000000..d7f6fde20720
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/preinstallcert.ts
@@ -0,0 +1,104 @@
+import path = require('path');
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import secureFilesCommon = require('azure-pipelines-tasks-securefiles-common/securefiles-common');
+import { OpenSSlError } from 'azure-pipelines-tasks-ios-signing-common/errors/OpenSSlError';
+import * as tl from 'azure-pipelines-task-lib/task';
+import os = require('os');
+
+const retryCount = 8;
+
+async function run() {
+ let secureFileId: string;
+ let secureFileHelpers: secureFilesCommon.SecureFileHelpers;
+
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ throw new Error(tl.loc('InstallRequiresMac'));
+ }
+
+ // download decrypted contents
+ secureFileId = tl.getInput('certSecureFile', true);
+ const opensslArgs = tl.getInput('opensslPkcsArgs', false);
+
+ secureFileHelpers = new secureFilesCommon.SecureFileHelpers(retryCount);
+ let certPath: string = await secureFileHelpers.downloadSecureFile(secureFileId);
+
+ let certPwd: string = tl.getInput('certPwd');
+
+ // get the P12 details - SHA1 hash, common name (CN) and expiration.
+ const p12Properties = await sign.getP12Properties(certPath, certPwd, opensslArgs);
+ let commonName: string = p12Properties.commonName;
+ const fingerprint: string = p12Properties.fingerprint,
+ notBefore: Date = p12Properties.notBefore,
+ notAfter: Date = p12Properties.notAfter;
+
+ // give user an option to override the CN as a workaround if we can't parse the certificate's subject.
+ const commonNameOverride: string = tl.getInput('certSigningIdentity', false);
+ if (commonNameOverride) {
+ commonName = commonNameOverride;
+ }
+
+ if (!fingerprint || !commonName) {
+ throw new Error(tl.loc('INVALID_P12'));
+ }
+ tl.setTaskVariable('APPLE_CERTIFICATE_SHA1HASH', fingerprint);
+
+ // set the signing identity output variable.
+ tl.setVariable('signingIdentity', commonName);
+
+ // Warn if the certificate is not yet valid or expired. If the dates are undefined or invalid, the comparisons below will return false.
+ const now: Date = new Date();
+ if (notBefore > now) {
+ throw new Error(tl.loc('CertNotValidYetError', commonName, fingerprint, notBefore));
+ }
+ if (notAfter < now) {
+ throw new Error(tl.loc('CertExpiredError', commonName, fingerprint, notAfter));
+ }
+
+ // install the certificate in specified keychain, keychain is created if required
+ let keychain: string = tl.getInput('keychain');
+ let keychainPwd: string = tl.getInput('keychainPassword');
+ let keychainPath: string;
+ if (keychain === 'temp') {
+ keychainPath = sign.getTempKeychainPath();
+ // generate a keychain password for the temporary keychain
+ // overriding any value we may have read because keychainPassword is hidden in the designer for 'temp'.
+ keychainPwd = Math.random().toString(36);
+
+ // tl.setSecret would work too, except it's not available in mock-task yet.
+ tl.setVariable('keychainPassword', keychainPwd, true);
+ } else if (keychain === 'default') {
+ keychainPath = await sign.getDefaultKeychainPath();
+ } else if (keychain === 'custom') {
+ keychainPath = tl.getInput('customKeychainPath', true);
+ }
+ tl.setTaskVariable('APPLE_CERTIFICATE_KEYCHAIN', keychainPath);
+
+ const setUpPartitionIdACLForPrivateKey: boolean = tl.getBoolInput('setUpPartitionIdACLForPrivateKey', false);
+ const useKeychainIfExists: boolean = true;
+ await sign.installCertInTemporaryKeychain(keychainPath, keychainPwd, certPath, certPwd, useKeychainIfExists, setUpPartitionIdACLForPrivateKey, opensslArgs);
+
+ // set the keychain output variable.
+ tl.setVariable('keychainPath', keychainPath);
+
+ // Set the legacy variables that doesn't use the task's refName, unlike our output variables.
+ // If there are multiple InstallAppleCertificate tasks, the last one wins.
+ tl.setVariable('APPLE_CERTIFICATE_SIGNING_IDENTITY', commonName);
+ tl.setVariable('APPLE_CERTIFICATE_KEYCHAIN', keychainPath);
+ } catch (err) {
+ if (err instanceof OpenSSlError) {
+ tl.warning(tl.loc('OpenSSLError'));
+ }
+ tl.setResult(tl.TaskResult.Failed, err);
+ } finally {
+ // delete certificate from temp location after installing
+ if (secureFileId && secureFileHelpers) {
+ secureFileHelpers.deleteSecureFile(secureFileId);
+ }
+ }
+}
+
+run();
diff --git a/_generated/InstallAppleCertificateV2/task.json b/_generated/InstallAppleCertificateV2/task.json
new file mode 100644
index 000000000000..aa5fc8edca51
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/task.json
@@ -0,0 +1,187 @@
+{
+ "id": "d2eff759-736d-4b7b-8554-7ba0960d49d6",
+ "name": "InstallAppleCertificate",
+ "friendlyName": "Install Apple certificate",
+ "description": "Install an Apple certificate required to build on a macOS agent machine",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-apple-certificate",
+ "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 2,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "releaseNotes": "Fixes codesign hangs on a self hosted agent. A Keychain password is now required to use `Default Keychain` or `Custom Keychain`. Microsoft hosted builds should use `Temporary Keychain`.",
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [
+ "xcode"
+ ],
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "Advanced",
+ "isExpanded": true
+ }
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "Install an Apple certificate",
+ "inputs": [
+ {
+ "name": "certSecureFile",
+ "type": "secureFile",
+ "label": "Certificate (P12)",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the certificate (.p12) that was uploaded to `Secure Files` to install on the macOS agent."
+ },
+ {
+ "name": "certPwd",
+ "type": "string",
+ "label": "Certificate (P12) password",
+ "required": false,
+ "helpMarkDown": "Password to the Apple certificate (.p12). Use a new build variable with its lock enabled on the `Variables` tab to encrypt this value."
+ },
+ {
+ "name": "keychain",
+ "type": "pickList",
+ "label": "Keychain",
+ "defaultValue": "temp",
+ "required": true,
+ "options": {
+ "default": "Default Keychain",
+ "temp": "Temporary Keychain",
+ "custom": "Custom Keychain"
+ },
+ "helpMarkDown": "Select the keychain in which to install the Apple certificate. For Microsoft hosted builds, use `Temporary Keychain`. A temporary keychain will always be deleted after the build or release is complete.",
+ "groupName": "advanced"
+ },
+ {
+ "name": "keychainPassword",
+ "type": "string",
+ "label": "Keychain password",
+ "required": true,
+ "helpMarkDown": "Password to unlock the keychain. Use a new build variable with its lock enabled on the `Variables` tab to encrypt this value.",
+ "visibleRule": "keychain = custom || keychain = default",
+ "groupName": "advanced"
+ },
+ {
+ "name": "customKeychainPath",
+ "type": "string",
+ "label": "Custom keychain path",
+ "required": true,
+ "helpMarkDown": "Full path to a custom keychain file. The keychain will be created if it does not exist.",
+ "visibleRule": "keychain = custom",
+ "groupName": "advanced"
+ },
+ {
+ "name": "deleteCert",
+ "type": "boolean",
+ "label": "Delete certificate from keychain",
+ "required": false,
+ "helpMarkDown": "Select to delete the certificate from the keychain after the build or release is complete.",
+ "visibleRule": "keychain = custom || keychain = default",
+ "groupName": "advanced"
+ },
+ {
+ "name": "deleteCustomKeychain",
+ "type": "boolean",
+ "label": "Delete custom keychain",
+ "required": false,
+ "helpMarkDown": "Select to delete the custom keychain from the agent after the build or release is complete.",
+ "visibleRule": "keychain = custom",
+ "groupName": "advanced"
+ },
+ {
+ "name": "signingIdentity",
+ "type": "string",
+ "label": "Certificate signing identity",
+ "required": false,
+ "helpMarkDown": "The Common Name of the subject in the signing certificate. Will attempt to parse the Common Name if this is left empty.",
+ "groupName": "advanced"
+ },
+ {
+ "name": "setUpPartitionIdACLForPrivateKey",
+ "type": "boolean",
+ "label": "Set up partition_id ACL for the imported private key",
+ "required": false,
+ "helpMarkDown": "If true - sets the partition_id ACL for the imported private key, so codesign won't prompt to use the key for signing. This isn't necessary for temporary keychains, at least on MacOS High Sierra. See the [link](http://www.openradar.me/28524119) for more details.",
+ "groupName": "advanced"
+ },
+ {
+ "name": "opensslPkcsArgs",
+ "type": "string",
+ "defaultValue": "",
+ "label": "OpenSSL arguments for PKCS12",
+ "required": false,
+ "helpMarkDown": "Arguments for extraction certificate information using openssl.",
+ "groupName": "advanced"
+ }
+ ],
+ "outputVariables": [
+ {
+ "name": "signingIdentity",
+ "description": "The resolved Common Name of the subject in the signing certificate. Either supplied as an input or parsed from the P12 certificate file."
+ },
+ {
+ "name": "keychainPath",
+ "description": "The path for the keychain file with the certificate."
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "signingIdentity",
+ "keychainPassword",
+ "keychainPath",
+ "APPLE_CERTIFICATE_SIGNING_IDENTITY",
+ "APPLE_CERTIFICATE_KEYCHAIN"
+ ]
+ }
+ },
+ "messages": {
+ "INVALID_P12": "Unable to find the certificate SHA1 hash and common name (CN). Verify that the certificate is a valid P12.",
+ "NoP12PwdWarning": "No P12 password was supplied. If the P12 file requires a password, the best practice is to supply it as pipeline variable and mark it secret by enabling the lock icon.",
+ "P12PrivateKeyNameNotFound": "Failed to identify the private key name: %s",
+ "SetKeyPartitionListCommandNotFound": "Skipping unnecessary keychain partition_id ACL assignment on this older OS. The security command 'set-key-partition-list' was introduced in macOS Sierra (10.12).",
+ "SetKeyPartitionListCommandFailed": "Error setting the partition_id ACL for the private key. Verify that the `Keychain password` is correct, or use a `Temporary Keychain` instead.",
+ "InstallRequiresMac": "Install Apple Certificate requires a macOS agent. Installing Apple Certificates on Linux or Windows is not supported by Apple.",
+ "CertNotValidYetError": "Certificate \"%s\" (fingerprint: %s) isn't valid until %s",
+ "CertExpiredError": "Certificate \"%s\" (fingerprint: %s) expired on %s",
+ "OpenSSLError": "Error parsing certificate. This might be caused by an unsupported algorithm. If you're using old certificate with a new OpenSSL version try to set -legacy flag in opensslPkcsArgs input."
+ },
+ "_buildConfigMapping": {
+ "Default": "2.229.3",
+ "Node20-225": "2.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/task.loc.json b/_generated/InstallAppleCertificateV2/task.loc.json
new file mode 100644
index 000000000000..3f94a1d1ec6e
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/task.loc.json
@@ -0,0 +1,187 @@
+{
+ "id": "d2eff759-736d-4b7b-8554-7ba0960d49d6",
+ "name": "InstallAppleCertificate",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-apple-certificate",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 2,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "releaseNotes": "ms-resource:loc.releaseNotes",
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [
+ "xcode"
+ ],
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "ms-resource:loc.group.displayName.advanced",
+ "isExpanded": true
+ }
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "inputs": [
+ {
+ "name": "certSecureFile",
+ "type": "secureFile",
+ "label": "ms-resource:loc.input.label.certSecureFile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.certSecureFile"
+ },
+ {
+ "name": "certPwd",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.certPwd",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.certPwd"
+ },
+ {
+ "name": "keychain",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.keychain",
+ "defaultValue": "temp",
+ "required": true,
+ "options": {
+ "default": "Default Keychain",
+ "temp": "Temporary Keychain",
+ "custom": "Custom Keychain"
+ },
+ "helpMarkDown": "ms-resource:loc.input.help.keychain",
+ "groupName": "advanced"
+ },
+ {
+ "name": "keychainPassword",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.keychainPassword",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.keychainPassword",
+ "visibleRule": "keychain = custom || keychain = default",
+ "groupName": "advanced"
+ },
+ {
+ "name": "customKeychainPath",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.customKeychainPath",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.customKeychainPath",
+ "visibleRule": "keychain = custom",
+ "groupName": "advanced"
+ },
+ {
+ "name": "deleteCert",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.deleteCert",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.deleteCert",
+ "visibleRule": "keychain = custom || keychain = default",
+ "groupName": "advanced"
+ },
+ {
+ "name": "deleteCustomKeychain",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.deleteCustomKeychain",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.deleteCustomKeychain",
+ "visibleRule": "keychain = custom",
+ "groupName": "advanced"
+ },
+ {
+ "name": "signingIdentity",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.signingIdentity",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.signingIdentity",
+ "groupName": "advanced"
+ },
+ {
+ "name": "setUpPartitionIdACLForPrivateKey",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.setUpPartitionIdACLForPrivateKey",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.setUpPartitionIdACLForPrivateKey",
+ "groupName": "advanced"
+ },
+ {
+ "name": "opensslPkcsArgs",
+ "type": "string",
+ "defaultValue": "",
+ "label": "ms-resource:loc.input.label.opensslPkcsArgs",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.opensslPkcsArgs",
+ "groupName": "advanced"
+ }
+ ],
+ "outputVariables": [
+ {
+ "name": "signingIdentity",
+ "description": "The resolved Common Name of the subject in the signing certificate. Either supplied as an input or parsed from the P12 certificate file."
+ },
+ {
+ "name": "keychainPath",
+ "description": "The path for the keychain file with the certificate."
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "signingIdentity",
+ "keychainPassword",
+ "keychainPath",
+ "APPLE_CERTIFICATE_SIGNING_IDENTITY",
+ "APPLE_CERTIFICATE_KEYCHAIN"
+ ]
+ }
+ },
+ "messages": {
+ "INVALID_P12": "ms-resource:loc.messages.INVALID_P12",
+ "NoP12PwdWarning": "ms-resource:loc.messages.NoP12PwdWarning",
+ "P12PrivateKeyNameNotFound": "ms-resource:loc.messages.P12PrivateKeyNameNotFound",
+ "SetKeyPartitionListCommandNotFound": "ms-resource:loc.messages.SetKeyPartitionListCommandNotFound",
+ "SetKeyPartitionListCommandFailed": "ms-resource:loc.messages.SetKeyPartitionListCommandFailed",
+ "InstallRequiresMac": "ms-resource:loc.messages.InstallRequiresMac",
+ "CertNotValidYetError": "ms-resource:loc.messages.CertNotValidYetError",
+ "CertExpiredError": "ms-resource:loc.messages.CertExpiredError",
+ "OpenSSLError": "ms-resource:loc.messages.OpenSSLError"
+ },
+ "_buildConfigMapping": {
+ "Default": "2.229.3",
+ "Node20-225": "2.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2/tsconfig.json b/_generated/InstallAppleCertificateV2/tsconfig.json
new file mode 100644
index 000000000000..0438b79f69ac
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/.npmrc b/_generated/InstallAppleCertificateV2_Node20/.npmrc
new file mode 100644
index 000000000000..5fca0d518be7
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/.npmrc
@@ -0,0 +1 @@
+scripts-prepend-node-path=true
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..2e36f5908d07
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Apple-Zertifikat installieren",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Hiermit wird ein Apple-Zertifikat installiert, das für den Buildvorgang auf einem macOS-Agent-Computer erforderlich ist.",
+ "loc.instanceNameFormat": "Apple-Zertifikat installieren",
+ "loc.releaseNotes": "Hiermit werden Codesignaturblockaden auf einem selbstgehosteten Agent behoben. Das Kennwort für den Schlüsselbund ist jetzt erforderlich, um \"Standardschlüsselbund\" oder \"Benutzerdefinierter Schlüsselbund\" zu verwenden. Für gehostete Microsoft-Builds muss \"Temporärer Schlüsselbund\" verwendet werden.",
+ "loc.group.displayName.advanced": "Erweitert",
+ "loc.input.label.certSecureFile": "Zertifikat (P12)",
+ "loc.input.help.certSecureFile": "Wählen Sie das Zertifikat (P12) aus, das in \"Secure Files\" (sichere Dateien) für die Installation auf dem macOS-Agent hochgeladen wurde.",
+ "loc.input.label.certPwd": "Zertifikatkennwort (P12)",
+ "loc.input.help.certPwd": "Kennwort für das Apple-Zertifikat (P12). Verwenden Sie eine neue Buildvariable, deren Sperre auf der Registerkarte \"Variablen\" aktiviert ist, um diesen Wert zu verschlüsseln.",
+ "loc.input.label.keychain": "Keychain",
+ "loc.input.help.keychain": "Wählen Sie die Keychain (die bei Apple \"Schlüsselbund\" genannt wird) aus, in der das Apple-Zertifikat installiert werden soll. Für gehostete Microsoft-Builds verwenden Sie \"Temporärer Schlüsselbund\" aus. Ein temporärer Schlüsselbund wird nach Build- oder Releaseabschluss immer gelöscht.",
+ "loc.input.label.keychainPassword": "Keychain-Kennwort",
+ "loc.input.help.keychainPassword": "Kennwort zum Entsperren des Schlüsselbunds. Verwenden Sie eine neue Buildvariable, deren Sperre auf der Registerkarte \"Variablen\" aktiviert ist, um diesen Wert zu verschlüsseln.",
+ "loc.input.label.customKeychainPath": "Pfad zur benutzerdefinierten Keychain",
+ "loc.input.help.customKeychainPath": "Vollständiger Pfad zu einer benutzerdefinierten Keychain-Datei. Wenn keine Keychain vorhanden ist, wird eine erstellt.",
+ "loc.input.label.deleteCert": "Zertifikat aus Keychain löschen",
+ "loc.input.help.deleteCert": "Wählen Sie, dass das Zertifikat nach Abschluss des Builds oder der Release aus der Keychain gelöscht wird.",
+ "loc.input.label.deleteCustomKeychain": "Benutzerdefinierte Keychain löschen",
+ "loc.input.help.deleteCustomKeychain": "Wählen Sie, dass die benutzerdefinierte Keychain nach Abschluss des Builds oder der Release aus dem Agent gelöscht wird.",
+ "loc.input.label.signingIdentity": "Zertifikatsignaturidentität",
+ "loc.input.help.signingIdentity": "Der allgemeine Name der Person im Signaturzertifikat. Wenn keine Angabe erfolgt, wird versucht, den allgemeinen Namen zu analysieren.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Partition_id-ACL für den importierten privaten Schlüssel einrichten",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "Bei „true“ wird die partition_id-ACL für den importierten privaten Schlüssel festgelegt, sodass codesign nicht zur Verwendung des Schlüssels zum Signieren auffordert. Dies ist für temporäre Keychains mindestens unter MacOS High Sierra nicht erforderlich. Weitere Informationen finden Sie im [link](http://www.openradar.me/28524119).",
+ "loc.messages.INVALID_P12": "Der Zertifikat-SHA1-Hash und der allgemeine Name (CN) wurden nicht gefunden. Das Zertifikat muss eine gültige P12-Datei sein.",
+ "loc.messages.NoP12PwdWarning": "Es wurde kein P12-Kennwort angegeben. Wenn für die P12-Datei ein Kennwort erforderlich ist, wird empfohlen, dieses als Pipelinevariable anzugeben und durch Aktivieren des Schlosssymbols als geheim zu markieren.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Fehler beim Identifizieren des Namens für den privaten Schlüssel: %s ",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Nicht benötigte partition_id-ACL-Schlüsselbundzuweisung wird auf diesem älteren Betriebssystem übersprungen. Der Sicherheitsbefehl \"set-key-partition-list\" wurde in macOS Sierra (10.12) eingeführt.",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Fehler beim Festlegen der partition_id-ACL für den privaten Schlüssel. Überprüfen Sie, ob \"Kennwort für Schlüsselbund\" richtig ist, oder verwenden Sie stattdessen \"Temporärer Schlüsselbund\".",
+ "loc.messages.InstallRequiresMac": "Für die Installation eines Apple-Zertifikats wird ein macOS-Agent benötigt. Das Installieren von Apple-Zertifikaten auf Linux oder Windows wird von Apple nicht unterstützt.",
+ "loc.messages.CertNotValidYetError": "Das Zertifikat \"%s\" (Fingerabdruck: \"%s\") ist erst ab dem %s gültig.",
+ "loc.messages.CertExpiredError": "Das Zertifikat \"%s\" (Fingerabdruck: \"%s\") ist am %s abgelaufen."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..dc57e3e4bd4c
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,37 @@
+{
+ "loc.friendlyName": "Install Apple certificate",
+ "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Install an Apple certificate required to build on a macOS agent machine",
+ "loc.instanceNameFormat": "Install an Apple certificate",
+ "loc.releaseNotes": "Fixes codesign hangs on a self hosted agent. A Keychain password is now required to use `Default Keychain` or `Custom Keychain`. Microsoft hosted builds should use `Temporary Keychain`.",
+ "loc.group.displayName.advanced": "Advanced",
+ "loc.input.label.certSecureFile": "Certificate (P12)",
+ "loc.input.help.certSecureFile": "Select the certificate (.p12) that was uploaded to `Secure Files` to install on the macOS agent.",
+ "loc.input.label.certPwd": "Certificate (P12) password",
+ "loc.input.help.certPwd": "Password to the Apple certificate (.p12). Use a new build variable with its lock enabled on the `Variables` tab to encrypt this value.",
+ "loc.input.label.keychain": "Keychain",
+ "loc.input.help.keychain": "Select the keychain in which to install the Apple certificate. For Microsoft hosted builds, use `Temporary Keychain`. A temporary keychain will always be deleted after the build or release is complete.",
+ "loc.input.label.keychainPassword": "Keychain password",
+ "loc.input.help.keychainPassword": "Password to unlock the keychain. Use a new build variable with its lock enabled on the `Variables` tab to encrypt this value.",
+ "loc.input.label.customKeychainPath": "Custom keychain path",
+ "loc.input.help.customKeychainPath": "Full path to a custom keychain file. The keychain will be created if it does not exist.",
+ "loc.input.label.deleteCert": "Delete certificate from keychain",
+ "loc.input.help.deleteCert": "Select to delete the certificate from the keychain after the build or release is complete.",
+ "loc.input.label.deleteCustomKeychain": "Delete custom keychain",
+ "loc.input.help.deleteCustomKeychain": "Select to delete the custom keychain from the agent after the build or release is complete.",
+ "loc.input.label.signingIdentity": "Certificate signing identity",
+ "loc.input.help.signingIdentity": "The Common Name of the subject in the signing certificate. Will attempt to parse the Common Name if this is left empty.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Set up partition_id ACL for the imported private key",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "If true - sets the partition_id ACL for the imported private key, so codesign won't prompt to use the key for signing. This isn't necessary for temporary keychains, at least on MacOS High Sierra. See the [link](http://www.openradar.me/28524119) for more details.",
+ "loc.input.label.opensslPkcsArgs": "OpenSSL arguments for PKCS12",
+ "loc.input.help.opensslPkcsArgs": "Arguments for extraction certificate information using openssl.",
+ "loc.messages.INVALID_P12": "Unable to find the certificate SHA1 hash and common name (CN). Verify that the certificate is a valid P12.",
+ "loc.messages.NoP12PwdWarning": "No P12 password was supplied. If the P12 file requires a password, the best practice is to supply it as pipeline variable and mark it secret by enabling the lock icon.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Failed to identify the private key name: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Skipping unnecessary keychain partition_id ACL assignment on this older OS. The security command 'set-key-partition-list' was introduced in macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Error setting the partition_id ACL for the private key. Verify that the `Keychain password` is correct, or use a `Temporary Keychain` instead.",
+ "loc.messages.InstallRequiresMac": "Install Apple Certificate requires a macOS agent. Installing Apple Certificates on Linux or Windows is not supported by Apple.",
+ "loc.messages.CertNotValidYetError": "Certificate \"%s\" (fingerprint: %s) isn't valid until %s",
+ "loc.messages.CertExpiredError": "Certificate \"%s\" (fingerprint: %s) expired on %s",
+ "loc.messages.OpenSSLError": "Error parsing certificate. This might be caused by an unsupported algorithm. If you're using old certificate with a new OpenSSL version try to set -legacy flag in opensslPkcsArgs input."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..061b43ce7999
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Instalar certificado de Apple",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Instala un certificado de Apple necesario para compilar en una máquina de agente de macOS.",
+ "loc.instanceNameFormat": "Instalar un certificado de Apple",
+ "loc.releaseNotes": "Corrige los bloqueos de la firma de código en un agente autohospedado. Una contraseña de cadena de claves debe utilizar ahora \"Default Keychain\" o \"Custom Keychain\". Las compilaciones hospedadas por Microsoft deben usar \"Temporary Keychain\".",
+ "loc.group.displayName.advanced": "Avanzado",
+ "loc.input.label.certSecureFile": "Certificado (P12)",
+ "loc.input.help.certSecureFile": "Seleccione el certificado (.p12) que se cargó en \"Archivos seguros\" para instalarlo en el agente de macOS.",
+ "loc.input.label.certPwd": "Contraseña de certificado (P12)",
+ "loc.input.help.certPwd": "Contraseña del certificado de Apple (.p12). Use una nueva variable de compilación con el bloqueo habilitado en la pestaña \"Variables\" para cifrar este valor.",
+ "loc.input.label.keychain": "Cadena de claves",
+ "loc.input.help.keychain": "Seleccione la cadena de claves en la que se va a instalar el certificado de Apple. Para compilaciones hospedadas por Microsoft, use \"Temporary Keychain\". Una cadena de claves temporal siempre se elimina una vez completada la compilación o la versión.",
+ "loc.input.label.keychainPassword": "Contraseña de cadena de claves",
+ "loc.input.help.keychainPassword": "Contraseña para desbloquear la cadena de claves. Use una nueva variable de compilación con el bloqueo habilitado en la pestaña \"Variables\" para cifrar este valor.",
+ "loc.input.label.customKeychainPath": "Ruta de acceso a cadena de claves personalizada",
+ "loc.input.help.customKeychainPath": "Ruta de acceso completa a un archivo de cadena de claves personalizada. Si la cadena de claves no existe, se crea.",
+ "loc.input.label.deleteCert": "Eliminar certificado de cadena de claves",
+ "loc.input.help.deleteCert": "Seleccione esta opción para eliminar el certificado de la cadena de claves una vez completada la compilación o la versión.",
+ "loc.input.label.deleteCustomKeychain": "Eliminar cadena de claves personalizada",
+ "loc.input.help.deleteCustomKeychain": "Seleccione esta opción para eliminar la cadena de claves personalizada del agente una vez completada la compilación o la versión.",
+ "loc.input.label.signingIdentity": "Identidad de firma de certificado",
+ "loc.input.help.signingIdentity": "Nombre común del firmante en el certificado de firma. Si se deja en blanco, se intentará analizar el nombre común.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Configurar la ACL de partition_id para la clave privada importada",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "Si es true, establece la ACL de partition_id para la clave privada importada, por lo que codesign no le pedirá que use la clave para firmar. Esto no es necesario para las cadenas de claves temporales, al menos en MacOS High Sierra. Consulte el [vínculo](http://www.openradar.me/28524119) para obtener más detalles.",
+ "loc.messages.INVALID_P12": "No se encuentran el hash SHA1 y el nombre común del certificado. Compruebe que este es un certificado P12 válido.",
+ "loc.messages.NoP12PwdWarning": "No se ha proporcionado ninguna contraseña P12. Si el archivo P12 requiere una contraseña, el procedimiento recomendado es proporcionarla como variable de canalización y marcarla como secreta al habilitar el icono de bloqueo.",
+ "loc.messages.P12PrivateKeyNameNotFound": "No se pudo identificar el nombre de la clave privada: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Se omite la asignación de ACL partition_id de cadena de claves innecesaria en este sistema operativo anterior. El comando de seguridad \"set-key-partition-list\" se introdujo en macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Error al establecer la lista ACL partition_id para la clave privada. Compruebe que la \"Contraseña de cadena de claves\" es correcta o use un valor de \"Temporary Keychain\" en su lugar.",
+ "loc.messages.InstallRequiresMac": "Para instalar un certificado de Apple, se requiere un agente de macOS. Apple no admite la instalación de certificados de Apple en Linux o Windows.",
+ "loc.messages.CertNotValidYetError": "El certificado \"%s\" (huella digital %s) no es válido hasta el %s.",
+ "loc.messages.CertExpiredError": "El certificado \"%s\" (huella digital %s) expiró el %s."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..237bb260be75
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Installer le certificat Apple",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Installer le certificat Apple nécessaire pour effectuer une build sur une machine d'agent macOS",
+ "loc.instanceNameFormat": "Installer un certificat Apple",
+ "loc.releaseNotes": "Corrige les plantages de codesign sur un agent autohébergé. Un mot de passe de trousseau est désormais obligatoire pour permettre l'utilisation de 'Trousseau par défaut' ou 'Trousseau personnalisé'. Les builds hébergées par Microsoft doivent utiliser le 'Trousseau temporaire'.",
+ "loc.group.displayName.advanced": "Avancé",
+ "loc.input.label.certSecureFile": "Certificat (P12)",
+ "loc.input.help.certSecureFile": "Sélectionnez le certificat (.p12) chargé sur 'Fichiers sécurisés' pour installer l'agent macOS.",
+ "loc.input.label.certPwd": "Mot de passe du certificat (P12)",
+ "loc.input.help.certPwd": "Mot de passe du certificat Apple (.p12). Pour chiffrer cette valeur, utilisez une nouvelle variable de build en activant son verrou sous l'onglet Variables.",
+ "loc.input.label.keychain": "Trousseau",
+ "loc.input.help.keychain": "Sélectionnez le trousseau dans lequel installer le certificat Apple. Pour les builds hébergées par Microsoft, utilisez le 'Trousseau temporaire'. Un trousseau temporaire est toujours supprimé, une fois la build ou la mise en production achevée.",
+ "loc.input.label.keychainPassword": "Mot de passe du trousseau",
+ "loc.input.help.keychainPassword": "Mot de passe permettant de déverrouiller le trousseau. Pour chiffrer cette valeur, utilisez une nouvelle variable de build en activant son verrou sous l'onglet Variables.",
+ "loc.input.label.customKeychainPath": "Chemin du trousseau personnalisé",
+ "loc.input.help.customKeychainPath": "Chemin complet d'un fichier de trousseau personnalisé. Le trousseau est créé, s'il n'existe pas déjà.",
+ "loc.input.label.deleteCert": "Supprimer le certificat du trousseau",
+ "loc.input.help.deleteCert": "Sélectionnez cette option pour supprimer le certificat du trousseau, une fois la build ou la mise en production effectuée.",
+ "loc.input.label.deleteCustomKeychain": "Supprimer le trousseau personnalisé",
+ "loc.input.help.deleteCustomKeychain": "Sélectionnez cette option pour supprimer le trousseau personnalisé de l'agent, une fois la build ou la mise en production effectuée.",
+ "loc.input.label.signingIdentity": "Identité de signature du certificat",
+ "loc.input.help.signingIdentity": "Nom commun du sujet dans le certificat de signature. Le nom commun fait l'objet d'une tentative d'analyse, si cette valeur reste vide.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Configurer partition_id liste de contrôle d’accès pour la clé privée importée",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "Si la valeur est true, définit la liste de contrôle d’accès partition_id pour la clé privée importée. Codesign n’invite donc pas à utiliser la clé pour la signature. Ceci n’est pas nécessaire pour les trousseaux temporaires, au moins sur MacOS High Sierra. Pour plus d’informations, consultez le [link](http://www.openradar.me/28524119).",
+ "loc.messages.INVALID_P12": "Le hachage du certificat SHA1 et le nom commun (CN) sont introuvables. Vérifiez qu'il s'agit d'un certificat P12 valide.",
+ "loc.messages.NoP12PwdWarning": "Aucun mot de passe P12 n'a été fourni. Si le fichier P12 nécessite un mot de passe, il est recommandé de le fournir sous forme de variable de pipeline et de le marquer comme étant secret en activant l'icône de verrouillage.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Échec de l'identification du nom de la clé privée : %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Les affectations inutiles d'ACL de partition_id d'un trousseau sont ignorées sur cet ancien système d'exploitation. La commande de sécurité 'set-key-partition-list' a été introduite dans macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Erreur durant la définition de l'ACL de partition_id pour la clé privée. Vérifiez que le 'Mot de passe du trousseau' est correct, ou utilisez un 'Trousseau temporaire' à la place.",
+ "loc.messages.InstallRequiresMac": "L'installation du certificat Apple nécessite un agent macOS. L'installation de certificats Apple sur Linux ou Windows n'est pas prise en charge par Apple.",
+ "loc.messages.CertNotValidYetError": "Le certificat \"%s\" (empreinte digitale : %s) est non valide avant %s",
+ "loc.messages.CertExpiredError": "Le certificat \"%s\" (empreinte digitale : %s) est arrivé à expiration le %s"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..dec76bd33c0c
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Installa certificato Apple",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Installa un certificato Apple necessario per compilare in un computer agente macOS",
+ "loc.instanceNameFormat": "Installa un certificato Apple",
+ "loc.releaseNotes": "Correzione del problema di blocco della firma del codice in un agente self-hosted. Per usare `Keychain predefinito` o `Keychain personalizzato` è necessaria una password del keychain. Con le compilazioni ospitate da Microsoft è necessario usare `Keychain temporaneo`.",
+ "loc.group.displayName.advanced": "Avanzate",
+ "loc.input.label.certSecureFile": "Certificato (P12)",
+ "loc.input.help.certSecureFile": "Consente di selezionare il certificato (con estensione p12) caricato in `File protetti` da installare nell'agente macOS.",
+ "loc.input.label.certPwd": "Password certificato (P12)",
+ "loc.input.help.certPwd": "Password del certificato Apple (con estensione p12). Per crittografare questo valore, usare una nuova variabile di compilazione con il relativo blocco abilitato nella scheda `Variabili`.",
+ "loc.input.label.keychain": "Keychain",
+ "loc.input.help.keychain": "Consente di selezionare il keychain in cui installare il certificato Apple. Per le compilazioni ospitate da Microsoft usare `Keychain temporaneo`. Un keychain temporaneo verrà sempre eliminato al completamento della compilazione o della versione.",
+ "loc.input.label.keychainPassword": "Password del portachiavi",
+ "loc.input.help.keychainPassword": "Password per sbloccare il keychain. Per crittografare questo valore, usare una nuova variabile di compilazione con il relativo blocco abilitato nella scheda `Variabili`.",
+ "loc.input.label.customKeychainPath": "Percorso del portachiavi personalizzato",
+ "loc.input.help.customKeychainPath": "Percorso completo di un file di keychain personalizzato. Se non esiste, il keychain verrà creato.",
+ "loc.input.label.deleteCert": "Elimina il certificato dal portachiavi",
+ "loc.input.help.deleteCert": "Selezionare questa opzione per eliminare il certificato dal keychain al completamento della compilazione o della versione.",
+ "loc.input.label.deleteCustomKeychain": "Elimina il portachiavi personalizzato",
+ "loc.input.help.deleteCustomKeychain": "Selezionare questa opzione per eliminare il keychain personalizzato dall'agente al completamento della compilazione o della versione.",
+ "loc.input.label.signingIdentity": "Identità di firma del certificato",
+ "loc.input.help.signingIdentity": "Nome comune del soggetto nel certificato di firma. Verrà eseguito un tentativo di analisi del nome comune se viene lasciato vuoto.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Configurare partition_id ACL per la chiave privata importata",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "Se true- imposta l'ACL partition_id per la chiave privata importata, codesign non richiederà l'uso della chiave per la firma. Questa operazione non è necessaria per i keychain temporanei, almeno in MacOS High Sierra. Per altri dettagli, vedere il [link] (http://www.openradar.me/28524119).",
+ "loc.messages.INVALID_P12": "L'hash SHA1 e il nome comune (CN) del certificato non sono stati trovati. Verificare che si tratti di un certificato P12 valido.",
+ "loc.messages.NoP12PwdWarning": "Non è stata fornita alcuna password P12. Se per il file P12 è necessaria una password, è consigliabile fornirla come variabile di pipeline e contrassegnarla come segreta abilitando l'icona del lucchetto.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Non è stato possibile identificare il nome della chiave privata: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "L'assegnazione ACL partition_id non necessaria del keychain verrà ignorata in questo sistema operativo meno recente. Il comando di sicurezza 'set-key-partition-list' è stato introdotto in macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Si è verificato un errore durante l'impostazione dell'ACL partition_id per la chiave privata. Verificare che il valore di `Password keychain` sia corretto oppure usare `Keychain temporaneo` instead.",
+ "loc.messages.InstallRequiresMac": "Per installare un certificato Apple, è richiesto un agente macOS. L'installazione di certificati Apple in Linux o Windows non è supportata da Apple.",
+ "loc.messages.CertNotValidYetError": "Il certificato \"%s\" (impronta digitale: %s) non è valido fino al giorno %s",
+ "loc.messages.CertExpiredError": "Il certificato \"%s\" (impronta digitale: %s) è scaduto il giorno %s"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..e9425e5f3c9c
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Apple 証明書のインストール",
+ "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "macOS エージェント マシン上でビルドを行うために必要な Apple 証明書をインストールします",
+ "loc.instanceNameFormat": "Apple 証明書のインストール",
+ "loc.releaseNotes": "セルフ ホステッド エージェントでの codesign のハングを修正します。`Default Keychain` または `Custom Keychain` を使用するにはキーチェーン パスワードが必須になりました。Microsoft によってホストされるビルドでは、`Temporary Keychain` を使用します。",
+ "loc.group.displayName.advanced": "詳細設定",
+ "loc.input.label.certSecureFile": "証明書 (P12)",
+ "loc.input.help.certSecureFile": "macOS エージェントにインストールするために [セキュア ファイル] にアップロードした証明書 (.p12) を選択します。",
+ "loc.input.label.certPwd": "証明書 (P12) のパスワード",
+ "loc.input.help.certPwd": "Apple 証明書 (.p12) に対するパスワード。この値を暗号化するには、新しいビルド変数を使い、[変数] タブで変数のロックを有効にします。",
+ "loc.input.label.keychain": "キーチェーン",
+ "loc.input.help.keychain": "Apple 証明書をインストールするキーチェーンを選択します。Microsoft がホストしているビルドの場合は、'一時キーチェーン' を使用してください。一時キーチェーンは、ビルドまたはリリースが完了するたびに削除されます。",
+ "loc.input.label.keychainPassword": "キーチェーンのパスワード",
+ "loc.input.help.keychainPassword": "キーチェーンをロック解除するためのパスワード。この値を暗号化するには、新しいビルド変数を使い、[変数] タブで変数のロックを有効にします。",
+ "loc.input.label.customKeychainPath": "カスタム キーチェーン パス",
+ "loc.input.help.customKeychainPath": "カスタム キーチェーン ファイルへの完全なパス。キーチェーンが存在しない場合は、作成されます。",
+ "loc.input.label.deleteCert": "キーチェーンからの証明書の削除",
+ "loc.input.help.deleteCert": "ビルドまたはリリースが完了した後に証明書をキーチェーンから削除するには、これを選択します。",
+ "loc.input.label.deleteCustomKeychain": "カスタム キーチェーンの削除",
+ "loc.input.help.deleteCustomKeychain": "ビルドまたはリリースが完了した後にカスタム キーチェーンをエージェントから削除するには、これを選択します。",
+ "loc.input.label.signingIdentity": "証明書の署名 ID",
+ "loc.input.help.signingIdentity": "署名証明書の件名の共通名。これが空のままの場合、共通名の解析を試行します。",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "インポートされた秘密キーの partition_id ACL を設定する",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "true の場合 - インポートされた秘密キーの partition_id ACL を設定するため、codesign は署名にキーの使用を求めません。これは、少なくとも MacOS High Sierra 上の一時的なキーチェーンには必要ありません。詳細については、[link] (http://www.openradar.me/28524119) を参照してください。",
+ "loc.messages.INVALID_P12": "証明書の SHA1 ハッシュと共通名 (CN) が見つかりません。証明書が有効な P12 であることを確認してください。",
+ "loc.messages.NoP12PwdWarning": "P12 パスワードが指定されていません。P12 ファイルがパスワードを必要とする場合、パイプライン変数としてそれを指定し、ロック アイコンを有効化して秘密としてマークするのが最善です。",
+ "loc.messages.P12PrivateKeyNameNotFound": "次の秘密キー名を識別できませんでした。%s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "この古い OS で不必要なキーチェーン partition_id ACL の代入をスキップします。セキュリティ コマンド 'set-key-partition-list' が、macOS Sierra (10.12) で導入されました。",
+ "loc.messages.SetKeyPartitionListCommandFailed": "秘密キーへの partition_id ACL の設定でエラーが発生しました。`Keychain password` が正しいことを確認するか、代わりに `Temporary Keychain` を使用します。",
+ "loc.messages.InstallRequiresMac": "Apple の証明書のインストールには、macOS エージェントが必要です。Apple は、Linux または Windows での Apple の証明書のインストールをサポートしていません。",
+ "loc.messages.CertNotValidYetError": "証明書 \"%s\" (フィンガープリント: %s) は %s まで有効ではありません",
+ "loc.messages.CertExpiredError": "証明書 \"%s\" (フィンガープリント: %s) の有効期限が %s に切れました"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..6d18d43b343e
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Apple 인증서 설치",
+ "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "빌드에 필요한 Apple 인증서를 macOS 에이전트 머신에 설치합니다.",
+ "loc.instanceNameFormat": "Apple 인증서 설치",
+ "loc.releaseNotes": "자체 호스팅 에이전트의 codesign 중단을 수정합니다. 이제 '기본 키 집합' 또는 '사용자 지정 키 집합'을 사용하려면 키 집합 암호가 필요합니다. Microsoft 호스팅 빌드는 '임시 키 집합'을 사용해야 합니다.",
+ "loc.group.displayName.advanced": "고급",
+ "loc.input.label.certSecureFile": "인증서(P12)",
+ "loc.input.help.certSecureFile": "macOS 에이전트에 설치할 '보안 파일'에 업로드된 인증서(.p12)를 선택합니다.",
+ "loc.input.label.certPwd": "인증서(P12) 암호",
+ "loc.input.help.certPwd": "Apple 인증서(.p12)의 암호입니다. 이 값을 암호화하려면 `변수` 탭에서 해당 잠금을 사용하도록 설정한 상태로 새 빌드 변수를 사용합니다.",
+ "loc.input.label.keychain": "키 집합",
+ "loc.input.help.keychain": "설치할 Apple 인증서가 있는 키 집합을 선택합니다. Microsoft에 호스트된 빌드의 경우 '임시 키 집합'을 사용합니다. 임시 키 집합은 빌드 또는 릴리스가 완료된 후 항상 삭제됩니다.",
+ "loc.input.label.keychainPassword": "키 집합 암호",
+ "loc.input.help.keychainPassword": "키 집합의 잠금을 해제할 암호입니다. 이 값을 암호화하려면 '변수' 탭에서 해당 잠금을 사용하도록 설정한 상태로 새 빌드 변수를 사용합니다.",
+ "loc.input.label.customKeychainPath": "사용자 정의 키 집합 경로",
+ "loc.input.help.customKeychainPath": "사용자 지정 키 집합 파일의 전체 경로입니다. 키 집합이 없으면 만들어집니다.",
+ "loc.input.label.deleteCert": "키 집합에서 인증서 삭제",
+ "loc.input.help.deleteCert": "빌드 또는 릴리스가 완료된 후 키 집합에서 인증서를 삭제하려면 선택합니다.",
+ "loc.input.label.deleteCustomKeychain": "사용자 정의 키 집합 삭제",
+ "loc.input.help.deleteCustomKeychain": "빌드 또는 릴리스가 완료된 후 에이전트에서 사용자 정의 키 집합을 삭제하려면 선택합니다.",
+ "loc.input.label.signingIdentity": "인증서 서명 ID",
+ "loc.input.help.signingIdentity": "서명 인증서의 주체 일반 이름입니다. 비워 두면 일반 이름을 구문 분석하려고 합니다.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "가져온 프라이빗 키에 대한 partition_id ACL 설정",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "true이면 가져온 프라이빗 키에 대한 partition_id ACL을 설정하므로 codesign은 서명에 키를 사용하라는 메시지를 표시하지 않습니다. 최소한 MacOS High Sierra에서는 임시 키 집합에 필요하지 않습니다. 자세한 내용은 [link](http://www.openradar.me/28524119)를 참조하세요.",
+ "loc.messages.INVALID_P12": "인증서 SHA1 해시 및 CN(일반 이름)을 찾을 수 없습니다. 인증서가 올바른 P12인지 확인하세요.",
+ "loc.messages.NoP12PwdWarning": "P12 암호를 제공하지 않았습니다. P12 파일에 암호가 필요한 경우 파이프라인 변수로 제공하고 잠금 아이콘을 사용하여 비밀로 표시하는 것이 좋습니다.",
+ "loc.messages.P12PrivateKeyNameNotFound": "프라이빗 키 이름을 확인하지 못했습니다. %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "이 이전 OS에 있는 불필요한 키 집합 partition_id ACL 할당을 건너뜁니다. 보안 명령 'set-key-partition-list'는 macOS Sierra(10.12)에서 도입되었습니다.",
+ "loc.messages.SetKeyPartitionListCommandFailed": "프라이빗 키의 partition_id ACL을 설정하는 중 오류가 발생했습니다. '키 집합 암호'가 올바른지 확인하거나, '임시 키 집합'을 대신 사용하세요.",
+ "loc.messages.InstallRequiresMac": "Apple 인증서를 설치하려면 macOS 에이전트가 필요합니다. Linux 또는 Windows에는 Apple 인증서를 설치할 수 없습니다.",
+ "loc.messages.CertNotValidYetError": "\"%s\" 인증서(지문: %s)는 %s까지 유효하지 않습니다.",
+ "loc.messages.CertExpiredError": "\"%s\" 인증서(지문: %s)가 %s에 만료되었습니다."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..d4e085563ecb
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "Установить сертификат Apple",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "Установить сертификат Apple, необходимый для сборки, на компьютер агента macOS",
+ "loc.instanceNameFormat": "Установить сертификат Apple",
+ "loc.releaseNotes": "Исправляет проблему с зависанием codesign в локальном агенте. Пароль цепочки ключей теперь требуется для использования цепочки ключей по умолчанию или пользовательской цепочки ключей. Сборки, размещенные на сервере Майкрософт, должны использовать временную цепочку ключей.",
+ "loc.group.displayName.advanced": "Дополнительно",
+ "loc.input.label.certSecureFile": "Сертификат (P12)",
+ "loc.input.help.certSecureFile": "Выберите сертификат (.p12), который был отправлен в раздел \"Защитные файлы\" для установки на агенте macOS.",
+ "loc.input.label.certPwd": "Пароль сертификата (P12)",
+ "loc.input.help.certPwd": "Пароль сертификата Apple (.p12). Для шифрования этого значения используйте новую переменную сборки, включив для нее блокировку на вкладке \"Переменные\".",
+ "loc.input.label.keychain": "Цепочка ключей",
+ "loc.input.help.keychain": "Выберите цепочку ключей, в которой необходимо установить сертификат Apple. Для сборок, размещенных в Майкрософт, используйте временную цепочку ключей. Временная цепочка ключей всегда удаляется после завершения сборки или выпуска.",
+ "loc.input.label.keychainPassword": "Пароль цепочки ключей",
+ "loc.input.help.keychainPassword": "Пароль для снятия блокировки цепочки ключей. Для шифрования этого значения используйте новую переменную сборки, включив для нее блокировку на вкладке \"Переменные\".",
+ "loc.input.label.customKeychainPath": "Путь к пользовательской цепочке ключей",
+ "loc.input.help.customKeychainPath": "Полный путь к файлу настраиваемой цепочки ключей. Если цепочки ключей не существует, она будет создана.",
+ "loc.input.label.deleteCert": "Удалить сертификат из цепочки ключей",
+ "loc.input.help.deleteCert": "Выберите этот параметр, чтобы удалить сертификат из цепочки ключей после завершения сборки или после создания выпуска.",
+ "loc.input.label.deleteCustomKeychain": "Удалить пользовательскую цепочку ключей",
+ "loc.input.help.deleteCustomKeychain": "Выберите этот параметр, чтобы удалить настраиваемую цепочку ключей из агента после завершения сборки или создания выпуска.",
+ "loc.input.label.signingIdentity": "Удостоверение подписывания сертификата",
+ "loc.input.help.signingIdentity": "Общее имя субъекта в сертификате для подписи. Если это поле оставить пустым, будет предпринята попытка проанализировать общее имя.",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "Настройка списка управления доступом partition_id для импортированного закрытого ключа",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "При значении \"true\" устанавливает список управления доступом partition_id для импортированного закрытого ключа, поэтому codesign не будет запрашивать ключ для подписи. Это не требуется для временных цепочек ключей, по крайней мере в MacOS High Sierra. Подробнее см. [здесь] (http://www.openradar.me/28524119).",
+ "loc.messages.INVALID_P12": "Не удается найти хэш SHA1 и общее имя сертификата. Убедитесь, что указан допустимый сертификат P12.",
+ "loc.messages.NoP12PwdWarning": "Не предоставлен пароль P12. Если файл P12 требует пароля, рекомендуется предоставить его в виде переменной конвейера, пометив ее как секретную с помощью значка блокировки.",
+ "loc.messages.P12PrivateKeyNameNotFound": "Не удалось определить имя закрытого ключа: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "Пропускается назначение ACL partition_id цепочки ключей, которое не требуется для этой старой версии ОС. Команда системы безопасности set-key-partition-list появилась в macOS Sierra (10.12).",
+ "loc.messages.SetKeyPartitionListCommandFailed": "Ошибка при установке ACL partition_id для закрытого ключа. Проверьте правильность пароля цепочки ключей или используйте временную цепочку ключей.",
+ "loc.messages.InstallRequiresMac": "Для установки сертификата Apple требуется агент macOS. Установка сертификатов Apple в Linux или Windows не поддерживается Apple.",
+ "loc.messages.CertNotValidYetError": "Сертификат \"%s\" (отпечаток: %s) является недействительным до %s",
+ "loc.messages.CertExpiredError": "Срок действия сертификата \"%s\" (отпечаток: %s) истек %s"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..6f62240676f7
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "安装 Apple 证书",
+ "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "将生成所需的 Apple 证书安装到 macOS 代理计算机上",
+ "loc.instanceNameFormat": "安装 Apple 证书",
+ "loc.releaseNotes": "修复程序 codesign 在自托管代理上挂起。密钥链密码现在需要使用 `Default Keychain` 或 `Custom Keychain`。Microsoft 托管生成应使用 `Temporary Keychain`。",
+ "loc.group.displayName.advanced": "高级",
+ "loc.input.label.certSecureFile": "证书(P12)",
+ "loc.input.help.certSecureFile": "选择已上传至“安全文件”的证书(.p12)以在 macOS 代理上进行安装。",
+ "loc.input.label.certPwd": "证书(P12)密码",
+ "loc.input.help.certPwd": "Apple 证书(.p12)的密码。使用新生成变量加密此值,在“变量”选项卡上启用锁定。",
+ "loc.input.label.keychain": "密钥链",
+ "loc.input.help.keychain": "选择要在其中安装 Apple 证书的密钥链。对于 Microsoft 托管的生成,请使用“临时密钥链”。生成或发布完成后始终会删除临时密钥链。",
+ "loc.input.label.keychainPassword": "钥匙链密码",
+ "loc.input.help.keychainPassword": "用于解锁密钥链的密码。使用在“变量”选项卡上启用了锁定的新的生成变量来加密该值。",
+ "loc.input.label.customKeychainPath": "自定义密钥链路径",
+ "loc.input.help.customKeychainPath": "自定义密钥链文件的完整路径。如果不存在,则会创建密钥链。",
+ "loc.input.label.deleteCert": "从密钥链删除证书",
+ "loc.input.help.deleteCert": "生成或发布完成后选择从密钥链删除此证书。",
+ "loc.input.label.deleteCustomKeychain": "删除自定义密钥链",
+ "loc.input.help.deleteCustomKeychain": "生成或发布完成后选择从代理删除此自定义密钥链。",
+ "loc.input.label.signingIdentity": "证书签名标识",
+ "loc.input.help.signingIdentity": "签名证书中的使用者公用名。如果公用名为空,将尝试对其进行分析。",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "为导入的私钥设置 partition_id ACL",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "如果为 true - 为导入的私钥设置 partition_id ACL,因此 codesign 不会提示使用密钥进行签名。这对于临时密钥链来说不是必需的,至少在 MacOS High Sierra 上是这样。有关更多详细信息,请参阅 [link](http://www.openradar.me/28524119)。",
+ "loc.messages.INVALID_P12": "无法找到证书 SHA1 哈希和公用名(CN)。请验证证书是否是有效的 P12。",
+ "loc.messages.NoP12PwdWarning": "未提供任何 P12 密码。如果 P12 文件需要密码,最佳做法是以管道变量的形式提供,并通过启用锁定图标将其标记为机密。",
+ "loc.messages.P12PrivateKeyNameNotFound": "无法标识私钥名称: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "正在跳过此较早的 OS 上不需要的密钥链 partition_id ACL 分配。macOS Sierra (10.12)中引入了安全命令 \"set-key-partition-list\"。 ",
+ "loc.messages.SetKeyPartitionListCommandFailed": "设置私钥的 partition_id ACL 时出错。验证“密钥链密码”是否正确,或改用“临时密钥链”。",
+ "loc.messages.InstallRequiresMac": "安装 Apple 证书需要 macOS 代理。Apple 不支持在 Linux 或 Windows 上安装 Apple 证书。",
+ "loc.messages.CertNotValidYetError": "证书“%s”(指纹: %s)在 %s之前无效",
+ "loc.messages.CertExpiredError": "证书“%s”(指纹: %s)已在 %s过期"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..a498f9d727c8
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,34 @@
+{
+ "loc.friendlyName": "安裝 Apple 憑證",
+ "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "loc.description": "在 macOS 代理程式電腦上執行建置作業必須安裝 Apple 憑證",
+ "loc.instanceNameFormat": "安裝 Apple 憑證",
+ "loc.releaseNotes": "修正 codesign 在自我裝載代理程式停止回應。現在必須有金鑰鏈密碼,才能使用 [預設金鑰鏈] 或 [自訂金鑰鏈]。Microsoft 裝載的組建應使用 [暫存金鑰鏈]。",
+ "loc.group.displayName.advanced": "進階",
+ "loc.input.label.certSecureFile": "憑證 (P12)",
+ "loc.input.help.certSecureFile": "選取已上傳到 [安全檔案] 的憑證 (.p12),以安裝在 macOS 代理程式上。",
+ "loc.input.label.certPwd": "憑證 (P12) 密碼",
+ "loc.input.help.certPwd": "Apple 憑證 (.p12) 的密碼。請使用已在 [變數] 索引標籤上啟用鎖定的新組建變數來加密這個值。",
+ "loc.input.label.keychain": "Keychain",
+ "loc.input.help.keychain": "請選取要在其中安裝 Apple 憑證的 Keychain。若為 Microsoft 裝載的組建,請使用 `Temporary Keychain`。暫存 Keychain 一律會在建置或發行完成後刪除。",
+ "loc.input.label.keychainPassword": "金鑰鏈密碼",
+ "loc.input.help.keychainPassword": "用以解開金鑰鏈的密碼。請使用 [變數] 索引標籤上已啟用鎖定的新組建變數,來為這個值加密。",
+ "loc.input.label.customKeychainPath": "自訂金鑰鏈路徑",
+ "loc.input.help.customKeychainPath": "自訂 keychain 檔案的完整路徑。如果不存在,則會建立此 keychain。",
+ "loc.input.label.deleteCert": "從金鑰鏈刪除憑證",
+ "loc.input.help.deleteCert": "選取此選項可在建置或發行完成之後,從 keychain 刪除憑證。",
+ "loc.input.label.deleteCustomKeychain": "刪除自訂金鑰鏈",
+ "loc.input.help.deleteCustomKeychain": "選取此選項可在建置或發行完成之後,從代理程式刪除自訂 keychain。",
+ "loc.input.label.signingIdentity": "憑證簽署身分識別",
+ "loc.input.help.signingIdentity": "簽署憑證中主體的一般名稱。若保留為空白,將會嘗試剖析一般名稱。",
+ "loc.input.label.setUpPartitionIdACLForPrivateKey": "為匯入的私密金鑰設定 partition_id ACL",
+ "loc.input.help.setUpPartitionIdACLForPrivateKey": "如果為 true - 為匯入的私密金鑰設定 partition_id ACL,因此 codesign 不會提示使用金鑰用於簽署。暫時金鑰鏈不需要此動作,至少在 MacOS High Sierra 上。如需詳細資料,請參閱 [連結](http://www.openradar.me/28524119)。",
+ "loc.messages.INVALID_P12": "找不到憑證 SHA1 雜湊和一般名稱 (CN)。請確認憑證是有效的 P12。",
+ "loc.messages.NoP12PwdWarning": "未提供任何 P12 密碼。如果 P12 檔需要密碼,最佳做法是以管線變數形式提供,並透過啟用鎖定圖示將其標示為祕密。",
+ "loc.messages.P12PrivateKeyNameNotFound": "無法識別私密金鑰名稱: %s",
+ "loc.messages.SetKeyPartitionListCommandNotFound": "正在此舊版 OS 上跳過不需要的 keychain partition_id ACL 指派。安全性命令 'set-key-partition-list' 於 macOS Sierra (10.12) 導入。",
+ "loc.messages.SetKeyPartitionListCommandFailed": "設定私密金鑰的 partition_id ACL 時發生錯誤。請驗證 [金鑰鏈密碼] 正確,或改用 [臨時金鑰鏈]。",
+ "loc.messages.InstallRequiresMac": "必須有 macOS 代理程式才能安裝 Apple Certificate。Apple 不支援在 Linux 或 Windows 上安裝 Apple Certificate。",
+ "loc.messages.CertNotValidYetError": "憑證 \"%s\" (指紋: %s) 於 %s 後才會生效",
+ "loc.messages.CertExpiredError": "憑證 \"%s\" (指紋: %s) 於 %s 過期"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0.ts
new file mode 100644
index 000000000000..5118dd724ef5
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0.ts
@@ -0,0 +1,187 @@
+import fs = require('fs');
+import assert = require('assert');
+import path = require('path');
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('InstallAppleCertificate Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000);
+ before(() => {
+ });
+
+ after(() => {
+ });
+
+ it('Defaults: install cert in temporary keychain', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallTempKeychain.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain'),
+ 'certificate should have been installed in the keychain');
+ assert(tr.ran('/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain'),
+ 'temp keychain should have been created.');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: install cert with empty password in temporary keychain', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallCertWithEmptyPassword.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain'),
+ 'certificate should have been installed in the keychain');
+ assert(tr.ran('/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain'),
+ 'temp keychain should have been created.');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: delete temporary keychain after build', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0DeleteTempKeychain.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security delete-keychain /build/temp/ios_signing_temp.keychain'),
+ 'keychain should have been deleted');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: install certificate in default keychain before build', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallDefaultKeychain.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain'),
+ 'certificate should have been installed in the default keychain');
+ assert(!tr.ran('/usr/bin/security create-keychain -p mykeychainPwd /usr/lib/login.keychain'), 'login keychain should not be created')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: install certificate in default keychain before build with openssl args', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallDefaultKeychainWithArgs.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain'),
+ 'certificate should have been installed in the default keychain');
+ assert(!tr.ran('/usr/bin/security create-keychain -p mykeychainPwd /usr/lib/login.keychain'), 'login keychain should not be created')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+
+ it('Defaults: delete certificate from default keychain after build', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0DeleteCertDefaultKeychain.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(!tr.ran('/usr/bin/security delete-keychain /usr/lib/login.keychain'),
+ 'defualt keychain should not have been deleted');
+ assert(tr.ran('/usr/bin/security delete-certificate -Z SHA1HASHOFP12CERTIFICATE /usr/lib/login.keychain'),
+ 'certificate should have been deleted from the default keychain.');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Defaults: with user input CN do not parse for it', (done: Mocha.Done) => {
+ // there is no way to verify the variable value as it is a 'side effect'
+ // this test just verifies that with user set CN, the task still works
+ let tp: string = path.join(__dirname, 'L0UserSupplyCN.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain'),
+ 'certificate should have been installed in the default keychain');
+ assert(!tr.ran('/usr/bin/security create-keychain -p mykeychainPwd /usr/lib/login.keychain'), 'login keychain should not be created')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+ done();
+ });
+
+ it('Installs certificate valid for a brief time', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0CertificateValidForABriefTime.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Fails on expired certificate', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0FailOnExpiredCertificate.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.failed, 'task should have failed');
+ assert(tr.errorIssues.length > 0, 'should have written to stderr');
+ assert(tr.errorIssues[0].indexOf('Error: loc_mock_CertExpiredError') >= 0, 'error message should match expected');
+
+ done();
+ });
+
+ it('Fails on windows', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0FailOnWindows.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.failed, 'task should have failed');
+ assert(tr.errorIssues.length > 0, 'should have written to stderr');
+ assert(tr.errorIssues[0].indexOf('Error: loc_mock_InstallRequiresMac') >= 0, 'error message should match expected');
+
+ done();
+ });
+
+ it('postexecution should not fail for errors', function (done: Mocha.Done) {
+ let tp: string = path.join(__dirname, 'L0ErrorsInPostExecutionJob.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.succeeded, 'postexecutionjob should have succeeded with warnings even when there are errors.');
+ assert(tr.stdout.indexOf('InstallRequiresMac'), 'warning for macos requirement should be shown.');
+
+ done();
+ });
+
+ it('Defaults: install cert in temporary keychain - skip partition_id ACL', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0InstallTempKeychainSkipPartitionIdACL.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain'),
+ 'certificate should have been installed in the keychain');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ assert(tr.stdout.indexOf('Setting the partition_id ACL') < 0, 'Setting the partition_id ACL should be skipped if setUpPartitionIdACLForPrivateKey=true');
+ done();
+ });
+});
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0CertificateValidForABriefTime.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0CertificateValidForABriefTime.ts
new file mode 100644
index 000000000000..32fb94017772
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0CertificateValidForABriefTime.ts
@@ -0,0 +1,116 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+// Have our certificate be valid only for a very short window of time. This confirms our date comparisons properly
+// account for timezones. Someone in a timezone ahead of UTC shouldn't have to wait to use a newly created certificate.
+
+// 10 minutes ago.
+const notBefore: Date = new Date(new Date().getTime() - 10 * 60 * 1000);
+
+// 10 minutes from now.
+const notAfter: Date = new Date(new Date().getTime() + 10 * 60 * 1000);
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/build/temp/ios_signing_temp.keychain": false
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": `MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=${toOpensslString(notBefore)}\nnotAfter=${toOpensslString(notAfter)}\n`
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain created"
+ },
+ "/usr/bin/security set-keychain-settings -lut 21600 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain settings"
+ },
+ "/usr/bin/security unlock-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "dumped keychain key"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/user/bin/login.keychain\n/build/temp/ios_signing_temp.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
+// Return a UTC date in this format: "Nov 13 03:37:42 2018 GMT"
+function toOpensslString(datetime: Date): string {
+ const dateSegments: string[] = datetime.toUTCString().split(' ');
+
+ if (dateSegments.length != 6) {
+ throw new Error('Expected 6 segments in the date string');
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toString
+ const date = dateSegments[1];
+ const monthName = dateSegments[2];
+ const year = dateSegments[3];
+ const time = dateSegments[4];
+
+ return `${monthName} ${date} ${time} ${year} GMT`;
+}
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0DeleteCertDefaultKeychain.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0DeleteCertDefaultKeychain.ts
new file mode 100644
index 000000000000..1d0636ae9000
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0DeleteCertDefaultKeychain.ts
@@ -0,0 +1,49 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('keychain', 'default');
+tr.setInput('deleteCert', 'true');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['VSTS_TASKVARIABLE_APPLE_CERTIFICATE_KEYCHAIN'] = '/usr/lib/login.keychain';
+process.env['VSTS_TASKVARIABLE_APPLE_CERTIFICATE_SHA1HASH'] = 'SHA1HASHOFP12CERTIFICATE';
+process.env['HOME'] = '/users/test';
+
+tr.registerMock('fs', {
+ ...fs,
+ readFileSync: fs.readFileSync,
+ statSync: fs.statSync,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security"
+ },
+ "checkPath": {
+ "/usr/bin/security": true
+ },
+ "exec": {
+ "/usr/bin/security delete-certificate -Z SHA1HASHOFP12CERTIFICATE /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "deleted keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0DeleteTempKeychain.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0DeleteTempKeychain.ts
new file mode 100644
index 000000000000..e26b4821345e
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0DeleteTempKeychain.ts
@@ -0,0 +1,50 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('keychain', 'temp');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['VSTS_TASKVARIABLE_APPLE_CERTIFICATE_KEYCHAIN'] = '/build/temp/ios_signing_temp.keychain';
+process.env['HOME'] = '/users/test';
+
+tr.registerMock('fs', {
+ ...fs,
+ readFileSync: fs.readFileSync,
+ statSync: fs.statSync,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security"
+ },
+ "exist": {
+ "/build/temp/ios_signing_temp.keychain": true
+ },
+ "checkPath": {
+ "/usr/bin/security": true
+ },
+ "exec": {
+ "/usr/bin/security delete-keychain /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "deleted keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0ErrorsInPostExecutionJob.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0ErrorsInPostExecutionJob.ts
new file mode 100644
index 000000000000..3e6d9a04f5d2
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0ErrorsInPostExecutionJob.ts
@@ -0,0 +1,32 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'win32';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0FailOnExpiredCertificate.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0FailOnExpiredCertificate.ts
new file mode 100644
index 000000000000..b2e4d81681ef
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0FailOnExpiredCertificate.ts
@@ -0,0 +1,75 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+// 10 minutes ago. The notAfter date string is generated instead of hardcoded to ensure the positive test,
+// L0CertificateValid.ts, is actually testing expiration times since reading them from the certificate is best effort.
+const expiredDate: Date = new Date(new Date().getTime() - 10 * 60 * 1000);
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": `MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2017 GMT\nnotAfter=${toOpensslString(expiredDate)}\n`
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
+// Return a UTC date in this format: "Nov 13 03:37:42 2018 GMT"
+function toOpensslString(datetime: Date): string {
+ const dateSegments: string[] = datetime.toUTCString().split(' ');
+
+ if (dateSegments.length != 6) {
+ throw new Error('Expected 6 segments in the date string');
+ }
+
+ // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toString
+ const date = dateSegments[1];
+ const monthName = dateSegments[2];
+ const year = dateSegments[3];
+ const time = dateSegments[4];
+
+ return `${monthName} ${date} ${time} ${year} GMT`;
+}
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0FailOnWindows.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0FailOnWindows.ts
new file mode 100644
index 000000000000..b581eadb1058
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0FailOnWindows.ts
@@ -0,0 +1,32 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'win32';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallCertWithEmptyPassword.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallCertWithEmptyPassword.ts
new file mode 100644
index 000000000000..814c201e7932
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallCertWithEmptyPassword.ts
@@ -0,0 +1,91 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', '');
+tr.setInput('keychain', 'temp');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/build/temp/ios_signing_temp.keychain": false
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass: | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass: -passout pass:115 | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain created"
+ },
+ "/usr/bin/security set-keychain-settings -lut 21600 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain settings"
+ },
+ "/usr/bin/security unlock-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "private key dump"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/user/bin/login.keychain\n/build/temp/ios_signing_temp.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallDefaultKeychain.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallDefaultKeychain.ts
new file mode 100644
index 000000000000..af37bae94d89
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallDefaultKeychain.ts
@@ -0,0 +1,83 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'default');
+tr.setInput('keychainPassword', 'mykeychainPwd');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/usr/lib/login.keychain": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security default-keychain": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ },
+ "/usr/bin/security unlock-keychain -p mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "private key dump"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallDefaultKeychainWithArgs.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallDefaultKeychainWithArgs.ts
new file mode 100644
index 000000000000..5727ec6e6046
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallDefaultKeychainWithArgs.ts
@@ -0,0 +1,84 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'default');
+tr.setInput('keychainPassword', 'mykeychainPwd');
+tr.setInput('opensslPkcsArgs', '-legacy');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/usr/lib/login.keychain": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd -legacy | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd -legacy | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security default-keychain": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ },
+ "/usr/bin/security unlock-keychain -p mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "private key dump"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallTempKeychain.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallTempKeychain.ts
new file mode 100644
index 000000000000..6fcd8e1baf6b
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallTempKeychain.ts
@@ -0,0 +1,91 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/build/temp/ios_signing_temp.keychain": false
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain created"
+ },
+ "/usr/bin/security set-keychain-settings -lut 21600 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain settings"
+ },
+ "/usr/bin/security unlock-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "dumped keychain key"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/user/bin/login.keychain\n/build/temp/ios_signing_temp.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallTempKeychainSkipPartitionIdACL.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallTempKeychainSkipPartitionIdACL.ts
new file mode 100644
index 000000000000..bd8e9b272106
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0InstallTempKeychainSkipPartitionIdACL.ts
@@ -0,0 +1,93 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'temp');
+tr.setInput('setUpPartitionIdACLForPrivateKey', 'true');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+
+// Mock Math.random() to always return the same value for our tests.
+Math.random = function (): number {
+ return 1337;
+}
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/build/temp/ios_signing_temp.keychain": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security create-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain created"
+ },
+ "/usr/bin/security set-keychain-settings -lut 21600 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain settings"
+ },
+ "/usr/bin/security unlock-keychain -p 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k 115 /build/temp/ios_signing_temp.keychain": {
+ "code": 0,
+ "stdout": "dumped keychain key"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/user/bin/login.keychain\n/build/temp/ios_signing_temp.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/L0UserSupplyCN.ts b/_generated/InstallAppleCertificateV2_Node20/Tests/L0UserSupplyCN.ts
new file mode 100644
index 000000000000..210009ef6026
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/L0UserSupplyCN.ts
@@ -0,0 +1,84 @@
+import * as ma from 'azure-pipelines-task-lib/mock-answer';
+import * as tmrm from 'azure-pipelines-task-lib/mock-run';
+import path = require('path');
+import fs = require('fs');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallcert.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('certSecureFile', 'mySecureFileId');
+tr.setInput('certSigningIdentity', 'Testing Signing');
+tr.setInput('certPwd', 'mycertPwd');
+tr.setInput('keychain', 'default');
+tr.setInput('keychainPassword', 'mykeychainPwd');
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+tr.registerMock('fs', {
+ ...fs,
+ writeFileSync: function (filePath, contents) {
+ }
+});
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['AGENT_TEMPDIRECTORY'] = '/build/temp';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "openssl": "/usr/bin/openssl",
+ "security": "/usr/bin/security",
+ "grep": "/usr/bin/grep"
+ },
+ "checkPath": {
+ "/usr/bin/openssl": true,
+ "/usr/bin/security": true,
+ "/usr/bin/grep": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/usr/lib/login.keychain": true
+ },
+ "exec": {
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nokeys -passin pass:mycertPwd | /usr/bin/openssl x509 -sha1 -noout -fingerprint -subject -dates -nameopt utf8,sep_semi_plus_space": {
+ "code": 0,
+ "stdout": "MAC verified OK\nSHA1 Fingerprint=BB:26:83:C6:AA:88:35:DE:36:94:F2:CF:37:0A:D4:60:BB:AE:87:0C\nsubject=UID=ZD34QB2EFN; CN=iPhone Developer: Madhuri Gummalla (HE432Y3E2Q); OU=A9M46DL4GH; O=Madhuri Gummalla; C=US\nnotBefore=Nov 13 03:37:42 2018 GMT\nnotAfter=Nov 13 03:37:42 2099 GMT\n"
+ },
+ "/usr/bin/openssl pkcs12 -in /build/temp/mySecureFileId.filename -nocerts -passin pass:mycertPwd -passout pass:mycertPwd | /usr/bin/grep friendlyName": {
+ "code": 0,
+ "stdout": "MAC verified OK\n friendlyName: iOS Developer: Madhuri Gummalla (Madhuri Gummalla)"
+ },
+ "/usr/bin/security default-keychain": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ },
+ "/usr/bin/security unlock-keychain -p mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "keychain unlocked"
+ },
+ "/usr/bin/security import /build/temp/mySecureFileId.filename -P mycertPwd -A -t cert -f pkcs12 -k /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "cert installed"
+ },
+ "/usr/bin/security set-key-partition-list -S apple-tool:,apple: -s -l iOS Developer: Madhuri Gummalla (Madhuri Gummalla) -k mykeychainPwd /usr/lib/login.keychain": {
+ "code": 0,
+ "stdout": "private key dump"
+ },
+ "/usr/bin/security list-keychain -d user": {
+ "code": 0,
+ "stdout": "/usr/lib/login.keychain"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/package-lock.json b/_generated/InstallAppleCertificateV2_Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..90797e6bb0da
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/package-lock.json
@@ -0,0 +1,24 @@
+{
+ "name": "vsts-tasks-installapplecertificate-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "10.17.44",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz",
+ "integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/_generated/InstallAppleCertificateV2_Node20/Tests/package.json b/_generated/InstallAppleCertificateV2_Node20/Tests/package.json
new file mode 100644
index 000000000000..9fa5cc3342f7
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/Tests/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "vsts-tasks-installapplecertificate-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install Apple Certificate Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^10.17.0",
+ "@types/mocha": "^5.2.7"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/_generated/InstallAppleCertificateV2_Node20/ThirdPartyNotice.txt b/_generated/InstallAppleCertificateV2_Node20/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..76f6688ea160
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/ThirdPartyNotice.txt
@@ -0,0 +1,432 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (InstallAppleCertificateV2) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/mocha (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+3. balanced-match (git://github.com/juliangruber/balanced-match.git)
+4. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+5. concat-map (git://github.com/substack/node-concat-map.git)
+6. minimatch (git://github.com/isaacs/minimatch.git)
+7. mockery (git://github.com/mfncooper/mockery.git)
+8. q (git://github.com/kriskowal/q.git)
+9. semver (git+https://github.com/npm/node-semver.git)
+10. shelljs (git://github.com/arturadib/shelljs.git)
+11. tunnel (git+https://github.com/koichik/node-tunnel.git)
+12. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+13. underscore (git://github.com/jashkenas/underscore.git)
+14. uuid (git+https://github.com/kelektiv/node-uuid.git)
+15. vso-node-api (git+https://github.com/Microsoft/vso-node-api.git)
+16. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git)
+
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
+%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF vso-node-api NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF vsts-task-lib NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/icon.png b/_generated/InstallAppleCertificateV2_Node20/icon.png
new file mode 100644
index 000000000000..5dda42229aad
Binary files /dev/null and b/_generated/InstallAppleCertificateV2_Node20/icon.png differ
diff --git a/_generated/InstallAppleCertificateV2_Node20/icon.svg b/_generated/InstallAppleCertificateV2_Node20/icon.svg
new file mode 100644
index 000000000000..74474e20632b
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/icon.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_generated/InstallAppleCertificateV2_Node20/make.json b/_generated/InstallAppleCertificateV2_Node20/make.json
new file mode 100644
index 000000000000..a935c9e8b738
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/make.json
@@ -0,0 +1,11 @@
+{
+ "rm": [
+ {
+ "items": [
+ "node_modules/azure-pipelines-tasks-ios-signing-common/node_modules/azure-pipelines-task-lib",
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
+ ],
+ "options": "-Rf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/package-lock.json b/_generated/InstallAppleCertificateV2_Node20/package-lock.json
new file mode 100644
index 000000000000..6fac092773fb
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/package-lock.json
@@ -0,0 +1,587 @@
+{
+ "name": "vsts-tasks-installapplecertificate",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-ios-signing-common": {
+ "version": "2.227.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-ios-signing-common/-/azure-pipelines-tasks-ios-signing-common-2.227.0.tgz",
+ "integrity": "sha512-Y1FEKwHE/mT4aa37qBUMs78yYLw0FRqxFPE26pA7SSFrIcz1LuaGhDJA3o94AmEAyfJxIk+S61TFMgLkqLM/lQ==",
+ "requires": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/InstallAppleCertificateV2_Node20/package.json b/_generated/InstallAppleCertificateV2_Node20/package.json
new file mode 100644
index 000000000000..b30597966996
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installapplecertificate",
+ "version": "1.0.0",
+ "description": "Azure Pipelines InstallAppleCertificate Task",
+ "main": "preinstallcert.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/mocha": "^5.2.7",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0",
+ "azure-pipelines-tasks-ios-signing-common": "2.227.0",
+ "azure-pipelines-task-lib": "^4.0.0-preview"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/_generated/InstallAppleCertificateV2_Node20/postinstallcert.ts b/_generated/InstallAppleCertificateV2_Node20/postinstallcert.ts
new file mode 100644
index 000000000000..8b4a8098cad7
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/postinstallcert.ts
@@ -0,0 +1,39 @@
+import path = require('path');
+import * as tl from 'azure-pipelines-task-lib/task';
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import os = require('os');
+
+async function run() {
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ console.log(tl.loc('InstallRequiresMac'));
+ } else {
+ let keychain: string = tl.getInput('keychain');
+ let keychainPath: string = tl.getTaskVariable('APPLE_CERTIFICATE_KEYCHAIN');
+
+ let deleteCert: boolean = tl.getBoolInput('deleteCert');
+ let hash: string = tl.getTaskVariable('APPLE_CERTIFICATE_SHA1HASH');
+ if (deleteCert && hash) {
+ await sign.deleteCert(keychainPath, hash);
+ }
+
+ let deleteKeychain: boolean = false;
+ if (keychain === 'temp') {
+ deleteKeychain = true;
+ } else if (keychain === 'custom') {
+ deleteKeychain = tl.getBoolInput('deleteCustomKeychain');
+ }
+
+ if (deleteKeychain && keychainPath) {
+ await sign.deleteKeychain(keychainPath);
+ }
+ }
+ } catch (err) {
+ tl.warning(err);
+ }
+}
+
+run();
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/preinstallcert.ts b/_generated/InstallAppleCertificateV2_Node20/preinstallcert.ts
new file mode 100644
index 000000000000..d7f6fde20720
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/preinstallcert.ts
@@ -0,0 +1,104 @@
+import path = require('path');
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import secureFilesCommon = require('azure-pipelines-tasks-securefiles-common/securefiles-common');
+import { OpenSSlError } from 'azure-pipelines-tasks-ios-signing-common/errors/OpenSSlError';
+import * as tl from 'azure-pipelines-task-lib/task';
+import os = require('os');
+
+const retryCount = 8;
+
+async function run() {
+ let secureFileId: string;
+ let secureFileHelpers: secureFilesCommon.SecureFileHelpers;
+
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ throw new Error(tl.loc('InstallRequiresMac'));
+ }
+
+ // download decrypted contents
+ secureFileId = tl.getInput('certSecureFile', true);
+ const opensslArgs = tl.getInput('opensslPkcsArgs', false);
+
+ secureFileHelpers = new secureFilesCommon.SecureFileHelpers(retryCount);
+ let certPath: string = await secureFileHelpers.downloadSecureFile(secureFileId);
+
+ let certPwd: string = tl.getInput('certPwd');
+
+ // get the P12 details - SHA1 hash, common name (CN) and expiration.
+ const p12Properties = await sign.getP12Properties(certPath, certPwd, opensslArgs);
+ let commonName: string = p12Properties.commonName;
+ const fingerprint: string = p12Properties.fingerprint,
+ notBefore: Date = p12Properties.notBefore,
+ notAfter: Date = p12Properties.notAfter;
+
+ // give user an option to override the CN as a workaround if we can't parse the certificate's subject.
+ const commonNameOverride: string = tl.getInput('certSigningIdentity', false);
+ if (commonNameOverride) {
+ commonName = commonNameOverride;
+ }
+
+ if (!fingerprint || !commonName) {
+ throw new Error(tl.loc('INVALID_P12'));
+ }
+ tl.setTaskVariable('APPLE_CERTIFICATE_SHA1HASH', fingerprint);
+
+ // set the signing identity output variable.
+ tl.setVariable('signingIdentity', commonName);
+
+ // Warn if the certificate is not yet valid or expired. If the dates are undefined or invalid, the comparisons below will return false.
+ const now: Date = new Date();
+ if (notBefore > now) {
+ throw new Error(tl.loc('CertNotValidYetError', commonName, fingerprint, notBefore));
+ }
+ if (notAfter < now) {
+ throw new Error(tl.loc('CertExpiredError', commonName, fingerprint, notAfter));
+ }
+
+ // install the certificate in specified keychain, keychain is created if required
+ let keychain: string = tl.getInput('keychain');
+ let keychainPwd: string = tl.getInput('keychainPassword');
+ let keychainPath: string;
+ if (keychain === 'temp') {
+ keychainPath = sign.getTempKeychainPath();
+ // generate a keychain password for the temporary keychain
+ // overriding any value we may have read because keychainPassword is hidden in the designer for 'temp'.
+ keychainPwd = Math.random().toString(36);
+
+ // tl.setSecret would work too, except it's not available in mock-task yet.
+ tl.setVariable('keychainPassword', keychainPwd, true);
+ } else if (keychain === 'default') {
+ keychainPath = await sign.getDefaultKeychainPath();
+ } else if (keychain === 'custom') {
+ keychainPath = tl.getInput('customKeychainPath', true);
+ }
+ tl.setTaskVariable('APPLE_CERTIFICATE_KEYCHAIN', keychainPath);
+
+ const setUpPartitionIdACLForPrivateKey: boolean = tl.getBoolInput('setUpPartitionIdACLForPrivateKey', false);
+ const useKeychainIfExists: boolean = true;
+ await sign.installCertInTemporaryKeychain(keychainPath, keychainPwd, certPath, certPwd, useKeychainIfExists, setUpPartitionIdACLForPrivateKey, opensslArgs);
+
+ // set the keychain output variable.
+ tl.setVariable('keychainPath', keychainPath);
+
+ // Set the legacy variables that doesn't use the task's refName, unlike our output variables.
+ // If there are multiple InstallAppleCertificate tasks, the last one wins.
+ tl.setVariable('APPLE_CERTIFICATE_SIGNING_IDENTITY', commonName);
+ tl.setVariable('APPLE_CERTIFICATE_KEYCHAIN', keychainPath);
+ } catch (err) {
+ if (err instanceof OpenSSlError) {
+ tl.warning(tl.loc('OpenSSLError'));
+ }
+ tl.setResult(tl.TaskResult.Failed, err);
+ } finally {
+ // delete certificate from temp location after installing
+ if (secureFileId && secureFileHelpers) {
+ secureFileHelpers.deleteSecureFile(secureFileId);
+ }
+ }
+}
+
+run();
diff --git a/_generated/InstallAppleCertificateV2_Node20/task.json b/_generated/InstallAppleCertificateV2_Node20/task.json
new file mode 100644
index 000000000000..d5f4ac982962
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/task.json
@@ -0,0 +1,195 @@
+{
+ "id": "d2eff759-736d-4b7b-8554-7ba0960d49d6",
+ "name": "InstallAppleCertificate",
+ "friendlyName": "Install Apple certificate",
+ "description": "Install an Apple certificate required to build on a macOS agent machine",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-apple-certificate",
+ "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=862067)",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 2,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "releaseNotes": "Fixes codesign hangs on a self hosted agent. A Keychain password is now required to use `Default Keychain` or `Custom Keychain`. Microsoft hosted builds should use `Temporary Keychain`.",
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [
+ "xcode"
+ ],
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "Advanced",
+ "isExpanded": true
+ }
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "Install an Apple certificate",
+ "inputs": [
+ {
+ "name": "certSecureFile",
+ "type": "secureFile",
+ "label": "Certificate (P12)",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the certificate (.p12) that was uploaded to `Secure Files` to install on the macOS agent."
+ },
+ {
+ "name": "certPwd",
+ "type": "string",
+ "label": "Certificate (P12) password",
+ "required": false,
+ "helpMarkDown": "Password to the Apple certificate (.p12). Use a new build variable with its lock enabled on the `Variables` tab to encrypt this value."
+ },
+ {
+ "name": "keychain",
+ "type": "pickList",
+ "label": "Keychain",
+ "defaultValue": "temp",
+ "required": true,
+ "options": {
+ "default": "Default Keychain",
+ "temp": "Temporary Keychain",
+ "custom": "Custom Keychain"
+ },
+ "helpMarkDown": "Select the keychain in which to install the Apple certificate. For Microsoft hosted builds, use `Temporary Keychain`. A temporary keychain will always be deleted after the build or release is complete.",
+ "groupName": "advanced"
+ },
+ {
+ "name": "keychainPassword",
+ "type": "string",
+ "label": "Keychain password",
+ "required": true,
+ "helpMarkDown": "Password to unlock the keychain. Use a new build variable with its lock enabled on the `Variables` tab to encrypt this value.",
+ "visibleRule": "keychain = custom || keychain = default",
+ "groupName": "advanced"
+ },
+ {
+ "name": "customKeychainPath",
+ "type": "string",
+ "label": "Custom keychain path",
+ "required": true,
+ "helpMarkDown": "Full path to a custom keychain file. The keychain will be created if it does not exist.",
+ "visibleRule": "keychain = custom",
+ "groupName": "advanced"
+ },
+ {
+ "name": "deleteCert",
+ "type": "boolean",
+ "label": "Delete certificate from keychain",
+ "required": false,
+ "helpMarkDown": "Select to delete the certificate from the keychain after the build or release is complete.",
+ "visibleRule": "keychain = custom || keychain = default",
+ "groupName": "advanced"
+ },
+ {
+ "name": "deleteCustomKeychain",
+ "type": "boolean",
+ "label": "Delete custom keychain",
+ "required": false,
+ "helpMarkDown": "Select to delete the custom keychain from the agent after the build or release is complete.",
+ "visibleRule": "keychain = custom",
+ "groupName": "advanced"
+ },
+ {
+ "name": "signingIdentity",
+ "type": "string",
+ "label": "Certificate signing identity",
+ "required": false,
+ "helpMarkDown": "The Common Name of the subject in the signing certificate. Will attempt to parse the Common Name if this is left empty.",
+ "groupName": "advanced"
+ },
+ {
+ "name": "setUpPartitionIdACLForPrivateKey",
+ "type": "boolean",
+ "label": "Set up partition_id ACL for the imported private key",
+ "required": false,
+ "helpMarkDown": "If true - sets the partition_id ACL for the imported private key, so codesign won't prompt to use the key for signing. This isn't necessary for temporary keychains, at least on MacOS High Sierra. See the [link](http://www.openradar.me/28524119) for more details.",
+ "groupName": "advanced"
+ },
+ {
+ "name": "opensslPkcsArgs",
+ "type": "string",
+ "defaultValue": "",
+ "label": "OpenSSL arguments for PKCS12",
+ "required": false,
+ "helpMarkDown": "Arguments for extraction certificate information using openssl.",
+ "groupName": "advanced"
+ }
+ ],
+ "outputVariables": [
+ {
+ "name": "signingIdentity",
+ "description": "The resolved Common Name of the subject in the signing certificate. Either supplied as an input or parsed from the P12 certificate file."
+ },
+ {
+ "name": "keychainPath",
+ "description": "The path for the keychain file with the certificate."
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "signingIdentity",
+ "keychainPassword",
+ "keychainPath",
+ "APPLE_CERTIFICATE_SIGNING_IDENTITY",
+ "APPLE_CERTIFICATE_KEYCHAIN"
+ ]
+ }
+ },
+ "messages": {
+ "INVALID_P12": "Unable to find the certificate SHA1 hash and common name (CN). Verify that the certificate is a valid P12.",
+ "NoP12PwdWarning": "No P12 password was supplied. If the P12 file requires a password, the best practice is to supply it as pipeline variable and mark it secret by enabling the lock icon.",
+ "P12PrivateKeyNameNotFound": "Failed to identify the private key name: %s",
+ "SetKeyPartitionListCommandNotFound": "Skipping unnecessary keychain partition_id ACL assignment on this older OS. The security command 'set-key-partition-list' was introduced in macOS Sierra (10.12).",
+ "SetKeyPartitionListCommandFailed": "Error setting the partition_id ACL for the private key. Verify that the `Keychain password` is correct, or use a `Temporary Keychain` instead.",
+ "InstallRequiresMac": "Install Apple Certificate requires a macOS agent. Installing Apple Certificates on Linux or Windows is not supported by Apple.",
+ "CertNotValidYetError": "Certificate \"%s\" (fingerprint: %s) isn't valid until %s",
+ "CertExpiredError": "Certificate \"%s\" (fingerprint: %s) expired on %s",
+ "OpenSSLError": "Error parsing certificate. This might be caused by an unsupported algorithm. If you're using old certificate with a new OpenSSL version try to set -legacy flag in opensslPkcsArgs input."
+ },
+ "_buildConfigMapping": {
+ "Default": "2.229.3",
+ "Node20-225": "2.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/task.loc.json b/_generated/InstallAppleCertificateV2_Node20/task.loc.json
new file mode 100644
index 000000000000..8ee0975a2935
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/task.loc.json
@@ -0,0 +1,195 @@
+{
+ "id": "d2eff759-736d-4b7b-8554-7ba0960d49d6",
+ "name": "InstallAppleCertificate",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-apple-certificate",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 2,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "releaseNotes": "ms-resource:loc.releaseNotes",
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [
+ "xcode"
+ ],
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "ms-resource:loc.group.displayName.advanced",
+ "isExpanded": true
+ }
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "inputs": [
+ {
+ "name": "certSecureFile",
+ "type": "secureFile",
+ "label": "ms-resource:loc.input.label.certSecureFile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.certSecureFile"
+ },
+ {
+ "name": "certPwd",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.certPwd",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.certPwd"
+ },
+ {
+ "name": "keychain",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.keychain",
+ "defaultValue": "temp",
+ "required": true,
+ "options": {
+ "default": "Default Keychain",
+ "temp": "Temporary Keychain",
+ "custom": "Custom Keychain"
+ },
+ "helpMarkDown": "ms-resource:loc.input.help.keychain",
+ "groupName": "advanced"
+ },
+ {
+ "name": "keychainPassword",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.keychainPassword",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.keychainPassword",
+ "visibleRule": "keychain = custom || keychain = default",
+ "groupName": "advanced"
+ },
+ {
+ "name": "customKeychainPath",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.customKeychainPath",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.customKeychainPath",
+ "visibleRule": "keychain = custom",
+ "groupName": "advanced"
+ },
+ {
+ "name": "deleteCert",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.deleteCert",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.deleteCert",
+ "visibleRule": "keychain = custom || keychain = default",
+ "groupName": "advanced"
+ },
+ {
+ "name": "deleteCustomKeychain",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.deleteCustomKeychain",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.deleteCustomKeychain",
+ "visibleRule": "keychain = custom",
+ "groupName": "advanced"
+ },
+ {
+ "name": "signingIdentity",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.signingIdentity",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.signingIdentity",
+ "groupName": "advanced"
+ },
+ {
+ "name": "setUpPartitionIdACLForPrivateKey",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.setUpPartitionIdACLForPrivateKey",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.setUpPartitionIdACLForPrivateKey",
+ "groupName": "advanced"
+ },
+ {
+ "name": "opensslPkcsArgs",
+ "type": "string",
+ "defaultValue": "",
+ "label": "ms-resource:loc.input.label.opensslPkcsArgs",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.opensslPkcsArgs",
+ "groupName": "advanced"
+ }
+ ],
+ "outputVariables": [
+ {
+ "name": "signingIdentity",
+ "description": "The resolved Common Name of the subject in the signing certificate. Either supplied as an input or parsed from the P12 certificate file."
+ },
+ {
+ "name": "keychainPath",
+ "description": "The path for the keychain file with the certificate."
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "preinstallcert.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "postinstallcert.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "signingIdentity",
+ "keychainPassword",
+ "keychainPath",
+ "APPLE_CERTIFICATE_SIGNING_IDENTITY",
+ "APPLE_CERTIFICATE_KEYCHAIN"
+ ]
+ }
+ },
+ "messages": {
+ "INVALID_P12": "ms-resource:loc.messages.INVALID_P12",
+ "NoP12PwdWarning": "ms-resource:loc.messages.NoP12PwdWarning",
+ "P12PrivateKeyNameNotFound": "ms-resource:loc.messages.P12PrivateKeyNameNotFound",
+ "SetKeyPartitionListCommandNotFound": "ms-resource:loc.messages.SetKeyPartitionListCommandNotFound",
+ "SetKeyPartitionListCommandFailed": "ms-resource:loc.messages.SetKeyPartitionListCommandFailed",
+ "InstallRequiresMac": "ms-resource:loc.messages.InstallRequiresMac",
+ "CertNotValidYetError": "ms-resource:loc.messages.CertNotValidYetError",
+ "CertExpiredError": "ms-resource:loc.messages.CertExpiredError",
+ "OpenSSLError": "ms-resource:loc.messages.OpenSSLError"
+ },
+ "_buildConfigMapping": {
+ "Default": "2.229.3",
+ "Node20-225": "2.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleCertificateV2_Node20/tsconfig.json b/_generated/InstallAppleCertificateV2_Node20/tsconfig.json
new file mode 100644
index 000000000000..0438b79f69ac
--- /dev/null
+++ b/_generated/InstallAppleCertificateV2_Node20/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1.versionmap.txt b/_generated/InstallAppleProvisioningProfileV1.versionmap.txt
new file mode 100644
index 000000000000..0cc6a72668be
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1.versionmap.txt
@@ -0,0 +1,2 @@
+Default|1.229.3
+Node20-225|1.229.4
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/de-DE/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..4759dea8dd50
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Apple-Bereitstellungsprofil installieren",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Hiermit wird ein Apple-Bereitstellungsprofil installiert, das für den Buildvorgang auf einem macOS-Agent-Computer erforderlich ist.",
+ "loc.instanceNameFormat": "Installieren Sie ein Apple-Bereitstellungsprofil.",
+ "loc.input.label.provisioningProfileLocation": "Speicherort des Bereitstellungsprofils",
+ "loc.input.help.provisioningProfileLocation": "Wählen Sie den Speicherort des Bereitstellungsprofils aus, das installiert werden soll. Das Bereitstellungsprofil kann in \"Sichere Dateien\" hochgeladen oder in Ihrem Quellrepository oder in einem lokalen Pfad auf dem Agent gespeichert werden.",
+ "loc.input.label.provProfileSecureFile": "Bereitstellungsprofil",
+ "loc.input.help.provProfileSecureFile": "Wählen Sie das Bereitstellungsprofil aus, das in \"Secure Files\" (sSichere Dateien) für die Installation auf dem macOS-Agent hochgeladen wurde.",
+ "loc.input.label.provProfileSourceRepository": "Profil wird bereitgestellt",
+ "loc.input.help.provProfileSourceRepository": "Wählen Sie das Bereitstellungsprofil aus dem Quellrepository aus, oder geben Sie den lokalen Pfad zu einem Bereitstellungsprofil auf dem macOS-Agent an.",
+ "loc.input.label.removeProfile": "Profil nach Buildvorgang entfernen",
+ "loc.input.help.removeProfile": "Wählen Sie dies aus, um anzugeben, dass das Bereitstellungsprofil nach Abschluss des Builds oder der Release aus dem Agent entfernt werden soll.",
+ "loc.messages.InputProvisioningProfileNotFound": "Das zu installierende Bereitstellungsprofil wurde nicht unter \"%s\" gefunden. Geben Sie den vollständigen Pfad zu einem Bereitstellungsprofil an.",
+ "loc.messages.InstallRequiresMac": "Für die Installation eines Apple-Bereitstellungsprofils ist ein macOS-Agent erforderlich. Eine Installation unter Windows oder Linux wird von Apple nicht unterstützt.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "Die Bereitstellungsprofildatei muss die Erweiterung \".mobileprovision\" oder \".provisionprofile\" aufweisen."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/en-US/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..dc2464dbc874
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Install Apple provisioning profile",
+ "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Install an Apple provisioning profile required to build on a macOS agent machine",
+ "loc.instanceNameFormat": "Install an Apple provisioning profile",
+ "loc.input.label.provisioningProfileLocation": "Provisioning profile location",
+ "loc.input.help.provisioningProfileLocation": "Select the location of the provisioning profile to install. The provisioning profile can be uploaded to `Secure Files` or stored in your source repository or a local path on the agent.",
+ "loc.input.label.provProfileSecureFile": "Provisioning profile",
+ "loc.input.help.provProfileSecureFile": "Select the provisioning profile that was uploaded to `Secure Files` to install on the macOS agent.",
+ "loc.input.label.provProfileSourceRepository": "Provisioning profile",
+ "loc.input.help.provProfileSourceRepository": "Select the provisioning profile from the source repository or specify the local path to a provisioning profile on the macOS agent.",
+ "loc.input.label.removeProfile": "Remove profile after build",
+ "loc.input.help.removeProfile": "Select to specify that the provisioning profile should be removed from the agent after the build or release is complete.",
+ "loc.messages.InputProvisioningProfileNotFound": "Provisioning profile to be installed was not found at %s. Specify the full file path to a provisioning profile.",
+ "loc.messages.InstallRequiresMac": "Install Apple Provisioning Profile requires a macOS agent. Installing on Windows or Linux is not supported by Apple.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "Provisioning profile file should have the extension '.mobileprovision' or '.provisionprofile'"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/es-ES/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..a60a547449c2
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Instalar perfil de aprovisionamiento de Apple",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Instale un perfil de aprovisionamiento de Apple necesario para compilar en una máquina de agente de macOS.",
+ "loc.instanceNameFormat": "Instalar un perfil de aprovisionamiento de Apple",
+ "loc.input.label.provisioningProfileLocation": "Ubicación del perfil de aprovisionamiento",
+ "loc.input.help.provisioningProfileLocation": "Seleccione la ubicación del perfil de aprovisionamiento que se va a instalar. El perfil de aprovisionamiento puede cargarse en \"Archivos seguros\" o almacenarse en el repositorio de origen o una ruta de acceso local en el agente.",
+ "loc.input.label.provProfileSecureFile": "Perfil de aprovisionamiento",
+ "loc.input.help.provProfileSecureFile": "Seleccione el perfil de aprovisionamiento que se cargó en los archivos seguros para instalarlo en el agente de macOS.",
+ "loc.input.label.provProfileSourceRepository": "Perfil de aprovisionamiento",
+ "loc.input.help.provProfileSourceRepository": "Seleccione el perfil de aprovisionamiento en el repositorio de origen o especifique la ruta de acceso local a un perfil de aprovisionamiento en el agente de macOS.",
+ "loc.input.label.removeProfile": "Quitar perfil después de la compilación",
+ "loc.input.help.removeProfile": "Seleccione esta opción para especificar que el perfil de aprovisionamiento debe quitarse del agente una vez finalizada la compilación o la versión.",
+ "loc.messages.InputProvisioningProfileNotFound": "El perfil de aprovisionamiento que se va a instalar no se encontró en %s. Especifique la ruta de acceso de archivo completa para un perfil de aprovisionamiento.",
+ "loc.messages.InstallRequiresMac": "La opción Instalar perfil de aprovisionamiento de Apple requiere un agente de macOS. Apple no admite la instalación en Windows o Linux.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "El archivo del perfil de aprovisionamiento debe tener la extensión \".mobileprovision\" o \".provisionprofile\"."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..19a7bc0b94eb
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Installer le profil de provisionnement Apple",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Installer le profil de provisionnement Apple nécessaire pour effectuer une build sur une machine d'agent macOS",
+ "loc.instanceNameFormat": "Installer un profil d'approvisionnement Apple",
+ "loc.input.label.provisioningProfileLocation": "Emplacement du profil de provisionnement",
+ "loc.input.help.provisioningProfileLocation": "Sélectionnez l'emplacement du profil de provisionnement à installer. Vous pouvez charger le profil de provisionnement sur 'Fichiers sécurisés', ou le stocker dans votre dépôt source ou un chemin local sur l'agent.",
+ "loc.input.label.provProfileSecureFile": "Profil de provisionnement",
+ "loc.input.help.provProfileSecureFile": "Sélectionnez le profil d'approvisionnement chargé sur 'Fichiers sécurisés' pour installer l'agent macOS.",
+ "loc.input.label.provProfileSourceRepository": "Profil de provisionnement",
+ "loc.input.help.provProfileSourceRepository": "Sélectionnez le profil de provisionnement à partir du dépôt source, ou spécifiez le chemin local d'un profil de provisionnement sur l'agent macOS.",
+ "loc.input.label.removeProfile": "Supprimer le profil après la build",
+ "loc.input.help.removeProfile": "Spécifiez que le profil d'approvisionnement doit être supprimé de l'agent, une fois la build ou la mise en production effectuée.",
+ "loc.messages.InputProvisioningProfileNotFound": "Le profil de provisionnement à installer est introuvable sur %s. Spécifiez le chemin de fichier complet d'un profil de provisionnement.",
+ "loc.messages.InstallRequiresMac": "L'installation du profil de provisionnement Apple nécessite un agent macOS. L'installation sur Windows ou Linux n'est pas prise en charge par Apple.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "Le fichier de profil de provisionnement doit avoir l'extension '.mobileprovision' ou '.provisionprofile'"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/it-IT/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..39a848fcb0dc
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Installa profilo di provisioning Apple",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Installa un profilo di provisioning Apple necessario per compilare in un computer agente macOS",
+ "loc.instanceNameFormat": "Installa un profilo di provisioning Apple",
+ "loc.input.label.provisioningProfileLocation": "Posizione del profilo di provisioning",
+ "loc.input.help.provisioningProfileLocation": "Consente di selezionare il percorso del profilo di provisioning da installare. Il profilo di provisioning può essere caricato in `File protetti` o archiviato nel repository di origine o in un percorso locale nell'agente.",
+ "loc.input.label.provProfileSecureFile": "Profilo di provisioning",
+ "loc.input.help.provProfileSecureFile": "Consente di selezionare il profilo di provisioning caricato in `File protetti` da installare nell'agente macOS.",
+ "loc.input.label.provProfileSourceRepository": "Profilo di provisioning",
+ "loc.input.help.provProfileSourceRepository": "Consente di selezionare il profilo di provisioning dal repository di origine o di specificare il percorso locale di un profilo di provisioning nell'agente macOS.",
+ "loc.input.label.removeProfile": "Rimuovi profilo dopo la compilazione",
+ "loc.input.help.removeProfile": "Selezionare questa opzione per specificare che il profilo di provisioning deve essere rimosso dall'agente al completamento della compilazione o della versione.",
+ "loc.messages.InputProvisioningProfileNotFound": "Il profilo di provisioning da installare non è stato trovato in %s. Specificare il percorso file completo di un profilo di provisioning.",
+ "loc.messages.InstallRequiresMac": "Per installare un profilo di provisioning Apple, è richiesto un agente macOS. L'installazione in Linux o Windows non è supportata da Apple.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "L'estensione del file del profilo di provisioning deve essere '.mobileprovision' o '.provisionprofile'"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..d2841f6fb371
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Apple プロビジョニング プロファイルのインストール",
+ "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "macOS エージェント マシン上でビルドを行うために必要な Apple プロビジョニング プロファイルをインストールします",
+ "loc.instanceNameFormat": "Apple プロビジョニング プロファイルのインストール",
+ "loc.input.label.provisioningProfileLocation": "プロビジョニング プロファイルの場所",
+ "loc.input.help.provisioningProfileLocation": "インストールするプロビジョニング プロファイルの場所を選択します。プロビジョニング プロファイルは、[セキュア ファイル] にアップロードすることもできますし、ソース リポジトリやエージェントのローカル パスに保管することもできます。",
+ "loc.input.label.provProfileSecureFile": "プロビジョニング プロファイル",
+ "loc.input.help.provProfileSecureFile": "macOS エージェントにインストールするため、`セキュア ファイル` にアップロードされたプロビジョニング プロファイルを選択します。",
+ "loc.input.label.provProfileSourceRepository": "プロビジョニング プロファイル",
+ "loc.input.help.provProfileSourceRepository": "ソース リポジトリからプロビジョニング プロファイルを選択するか、macOS エージェント上のプロビジョニング プロファイルのローカル パスを指定します。",
+ "loc.input.label.removeProfile": "ビルド後のプロファイル削除",
+ "loc.input.help.removeProfile": "ビルドまたはリリースが完了した後でエージェントからプロビジョニング プロファイルを削除するよう指定する場合に選択します。",
+ "loc.messages.InputProvisioningProfileNotFound": "インストールするプロビジョニング プロファイルが %s に見つかりませんでした。プロビジョニング プロファイルへの完全なファイル パスを指定してください。",
+ "loc.messages.InstallRequiresMac": "Apple プロビジョニング プロファイルのインストールには macOS エージェントが必要です。Apple は、Windows または Linux でのインストールをサポートしていません。",
+ "loc.messages.InvalidMobileProvisionFileExtension": "プロビジョニング プロファイル ファイルの拡張子は '.mobileprovision' または '.provisionprofile' でなければなりません"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..ae9d6192cc49
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Apple 권한 설정 프로파일 설치",
+ "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "빌드에 필요한 Apple 권한 설정 프로파일을 macOS 에이전트 머신에 설치합니다.",
+ "loc.instanceNameFormat": "Apple 권한 설정 프로파일 설치",
+ "loc.input.label.provisioningProfileLocation": "프로비전 프로필 위치",
+ "loc.input.help.provisioningProfileLocation": "설치할 프로비전 프로필의 위치를 선택합니다. 프로비전 프로필은 '보안 파일'에 업로드하거나 소스 리포지토리 또는 에이전트의 로컬 경로에 저장할 수 있습니다.",
+ "loc.input.label.provProfileSecureFile": "프로비전 프로필",
+ "loc.input.help.provProfileSecureFile": "macOS 에이전트에 설치할 '보안 파일'에 업로드된 프로비저닝 프로필을 선택합니다.",
+ "loc.input.label.provProfileSourceRepository": "프로비전 프로필",
+ "loc.input.help.provProfileSourceRepository": "소스 리포지토리에서 프로비전 프로필을 선택하거나 macOS 에이전트에 있는 프로비전 프로필의 로컬 경로를 지정합니다.",
+ "loc.input.label.removeProfile": "빌드 후 프로필 제거",
+ "loc.input.help.removeProfile": "빌드 또는 릴리스가 완료된 후에 에이전트에서 프로비저닝 프로필을 제거하도록 지정하려면 선택합니다.",
+ "loc.messages.InputProvisioningProfileNotFound": "설치할 프로비전 프로필이 %s에 없습니다. 프로비전 프로필의 전체 파일 경로를 지정하세요.",
+ "loc.messages.InstallRequiresMac": "Apple 권한 설정 프로파일을 설치하려면 macOS 에이전트가 필요합니다. Windows 또는 Linux에는 설치할 수 없습니다.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "프로비저닝 프로필 파일의 확장명은 '.mobileprovision' 또는 '.provisionprofile'이어야 함"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..9e5d2ab265ac
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Установить профиль подготовки Apple",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Установить профиль подготовки Apple, необходимый для сборки, на компьютер агента macOS",
+ "loc.instanceNameFormat": "Установка профиля подготовки Apple",
+ "loc.input.label.provisioningProfileLocation": "Расположение профиля подготовки",
+ "loc.input.help.provisioningProfileLocation": "Выберите расположение для установки профиля подготовки. Профиль подготовки можно отправить в раздел \"Безопасные файлы\" или сохранить в исходном репозитории либо в локальном каталоге на агенте.",
+ "loc.input.label.provProfileSecureFile": "Профиль подготовки",
+ "loc.input.help.provProfileSecureFile": "Выберите профиль подготовки, отправленный в \"Защитные файлы\", для установки на агент macOS.",
+ "loc.input.label.provProfileSourceRepository": "Профиль подготовки",
+ "loc.input.help.provProfileSourceRepository": "Выберите профиль подготовки из исходного репозитория или укажите локальный путь к профилю подготовки на агенте для macOS.",
+ "loc.input.label.removeProfile": "Удалить профиль после сборки",
+ "loc.input.help.removeProfile": "Выберите, чтобы указать, что по завершении сборки или версии профиль подготовки следует удалить с агента.",
+ "loc.messages.InputProvisioningProfileNotFound": "Устанавливаемый профиль подготовки не найден в %s. Укажите полный путь к профилю подготовки.",
+ "loc.messages.InstallRequiresMac": "Для установки профиля подготовки Apple требуется агент macOS. Установка в Linux или Windows не поддерживается Apple.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "Файл профиля подготовки должен иметь расширение \"MOBILEPROVISION\" или \"PROVISIONPROFILE\""
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..2ae9192e3264
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "安装 Apple 预配配置文件",
+ "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "将生成所需的 Apple 预配配置文件安装到 macOS 代理计算机上",
+ "loc.instanceNameFormat": "安装 apple 预配配置文件",
+ "loc.input.label.provisioningProfileLocation": "预配配置文件位置",
+ "loc.input.help.provisioningProfileLocation": "选择要安装的预配配置文件的位置。可将预配配置文件上传到“安全文件”,或者存储在源存储库或代理上的本地路径中。",
+ "loc.input.label.provProfileSecureFile": "预配配置文件",
+ "loc.input.help.provProfileSecureFile": "选择已上传到“安全文件”的预配配置文件,将其安装到 macOS 代理上。",
+ "loc.input.label.provProfileSourceRepository": "预配配置文件",
+ "loc.input.help.provProfileSourceRepository": "从源存储库中选择预配配置文件,或指定 macOS 代理上预配配置文件的本地路径。",
+ "loc.input.label.removeProfile": "在生成后删除配置文件",
+ "loc.input.help.removeProfile": "选择指定在生成或发布完成后应从代理中删除预配配置文件。",
+ "loc.messages.InputProvisioningProfileNotFound": "未在 %s 处找到要安装的预配配置文件。指定预配配置文件的完整文件路径。",
+ "loc.messages.InstallRequiresMac": "安装 Apple 预配配置文件需要 macOS 代理。Apple 不支持在 Windows 或 Linux 上进行安装。",
+ "loc.messages.InvalidMobileProvisionFileExtension": "预配配置文件应带有 \".mobileprovision\" 或 \".provisionprofile\" 扩展名"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..c460fd3e24b8
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "安裝 Apple 佈建設定檔",
+ "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "在 macOS 代理程式電腦上執行建置作業必須安裝 Apple 佈建設定檔",
+ "loc.instanceNameFormat": "安裝 Apple 佈建設定檔",
+ "loc.input.label.provisioningProfileLocation": "佈建設定檔位置",
+ "loc.input.help.provisioningProfileLocation": "選取佈建設定檔的安裝位置。您可將佈建設定檔上傳至 `Secure Files`,或儲存在來源存放庫/代理程式上的本機路徑。",
+ "loc.input.label.provProfileSecureFile": "正在佈建設定檔",
+ "loc.input.help.provProfileSecureFile": "請選取已上傳到 [安全檔案] 的佈建設定檔,以安裝在 macOS 代理程式上。",
+ "loc.input.label.provProfileSourceRepository": "正在佈建設定檔",
+ "loc.input.help.provProfileSourceRepository": "從來源存放庫選取佈建設定檔,或指定 macOS 代理程式上的佈建設定檔本機路徑。",
+ "loc.input.label.removeProfile": "在建置後移除設定檔",
+ "loc.input.help.removeProfile": "選取此選項可指定在建置或發行完成之後,從代理程式刪除佈建設定檔。",
+ "loc.messages.InputProvisioningProfileNotFound": "無法在 %s 找到要安裝的佈建設定檔。請指定完整的佈建設定檔檔案路徑。",
+ "loc.messages.InstallRequiresMac": "必須有 macOS 代理程式才能安裝 Apple 佈建設定檔。Apple 不支援在 Windows 或 Linux 上安裝。",
+ "loc.messages.InvalidMobileProvisionFileExtension": "佈建設定檔的副檔名應為 '.mobileprovision' 或 '.provisionprofile'"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/L0.ts b/_generated/InstallAppleProvisioningProfileV1/Tests/L0.ts
new file mode 100644
index 000000000000..81ead0e0992c
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/L0.ts
@@ -0,0 +1,109 @@
+import fs = require('fs');
+import assert = require('assert');
+import path = require('path');
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('InstallAppleProvisioningProfile Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000);
+ before(() => {
+ });
+
+ after(() => {
+ });
+
+ it('Defaults: install from SecureFile', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0SecureFile.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security cms -D -i /build/temp/mySecureFileId.mobileprovision'),
+ 'provisioning profile should have been installed.')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Install from source repository', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0SourceRepository.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security cms -D -i /build/source/myprovisioningprofile.mobileprovision'),
+ 'provisioning profile should have been installed.')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Install from source repository fails if provisioning profile is not found', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0SourceRepositoryProfileNotFound.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+ let expectedErr: string = "loc_mock_InputProvisioningProfileNotFound /build/source/doesnotexist.provisionprofile";
+ assert(tr.stderr.length > 0 || tr.errorIssues.length > 0, 'should have written to stderr');
+ assert(tr.stdErrContained(expectedErr) || tr.createdErrorIssue(expectedErr), 'Error message should have said: ' + expectedErr);
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('Install profile file with no file extension', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0ProfileNoExtension.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security cms -D -i /build/source/myprovisioningprofile'),
+ 'provisioning profile should have been installed.');
+ assert(tr.ran('/bin/cp -f /build/source/myprovisioningprofile /users/test/Library/MobileDevice/Provisioning Profiles/testuuid'),
+ 'copied provisioning profile should not have an extension');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Remove profile during post execution', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0RemoveProfile.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/bin/rm -f /users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision'),
+ 'provisioning profile should have been deleted.')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Fails on windows', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0FailOnWindows.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.failed, 'task should have failed');
+ assert(tr.errorIssues.length > 0, 'should have written to stderr');
+ assert(tr.errorIssues[0].indexOf('Error: loc_mock_InstallRequiresMac') >= 0, 'error message should match expected');
+
+ done();
+ });
+
+ it('postexecution should not fail for errors', function (done: Mocha.Done) {
+ let tp: string = path.join(__dirname, 'L0ErrorsInPostExecutionJob.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.succeeded, 'postexecutionjob should have succeeded with warnings even when there are errors.');
+ assert(tr.stdout.indexOf('InstallRequiresMac'), 'warning for macos requirement should be shown.');
+
+ done();
+ });
+});
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/L0ErrorsInPostExecutionJob.ts b/_generated/InstallAppleProvisioningProfileV1/Tests/L0ErrorsInPostExecutionJob.ts
new file mode 100644
index 000000000000..af84cc84e78f
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/L0ErrorsInPostExecutionJob.ts
@@ -0,0 +1,29 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'secureFiles');
+tr.setInput('provProfileSecureFile', 'mySecureFileId');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'win32';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/L0FailOnWindows.ts b/_generated/InstallAppleProvisioningProfileV1/Tests/L0FailOnWindows.ts
new file mode 100644
index 000000000000..8cb6b97890a5
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/L0FailOnWindows.ts
@@ -0,0 +1,29 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'secureFiles');
+tr.setInput('provProfileSecureFile', 'mySecureFileId');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'win32';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/L0ProfileNoExtension.ts b/_generated/InstallAppleProvisioningProfileV1/Tests/L0ProfileNoExtension.ts
new file mode 100644
index 000000000000..95708122a313
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/L0ProfileNoExtension.ts
@@ -0,0 +1,71 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'installprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'sourceRepository');
+tr.setInput('provProfileSourceRepository', '/build/source/myprovisioningprofile');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/libexec/PlistBuddy": true,
+ "/bin/rm": true,
+ "/bin/cp": true
+ },
+ "exist": {
+ "/build/source/myprovisioningprofile": true
+ },
+ "stats": {
+ "/build/source/myprovisioningprofile": {
+ "isFile": true
+ }
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/source/myprovisioningprofile": {
+ "code": 0,
+ "stdout": "prov profile details here"
+ },
+ "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testuuid"
+ },
+ "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testprovname"
+ },
+ "/bin/cp -f /build/source/myprovisioningprofile /users/test/Library/MobileDevice/Provisioning Profiles/testuuid": {
+ "code": 0,
+ "stdout": "provisioning profile copied"
+ },
+ "/bin/rm -f _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "delete output here"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/L0RemoveProfile.ts b/_generated/InstallAppleProvisioningProfileV1/Tests/L0RemoveProfile.ts
new file mode 100644
index 000000000000..adac54fdfe2c
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/L0RemoveProfile.ts
@@ -0,0 +1,47 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('removeProfile', 'true');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['VSTS_TASKVARIABLE_APPLE_PROV_PROFILE_UUID'] = 'testuuid';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "rm": "/bin/rm"
+ },
+ "checkPath": {
+ "/bin/rm": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision": true
+ },
+ "findMatch": {
+ "testuuid*": [
+ "/users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision"
+ ]
+ },
+ "exec": {
+ "/bin/rm -f /users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision": {
+ "code": 0,
+ "stdout": "delete output here"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/L0SecureFile.ts b/_generated/InstallAppleProvisioningProfileV1/Tests/L0SecureFile.ts
new file mode 100644
index 000000000000..5157d2298e49
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/L0SecureFile.ts
@@ -0,0 +1,68 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'secureFiles');
+tr.setInput('provProfileSecureFile', 'mySecureFileId');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+const secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+secureFileHelperMock.SecureFileHelpers.setFileExtension(".mobileprovision");
+
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/libexec/PlistBuddy": true,
+ "/bin/rm": true,
+ "/bin/cp": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.mobileprovision": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.mobileprovision": {
+ "code": 0,
+ "stdout": "prov profile details here"
+ },
+ "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testuuid"
+ },
+ "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testprovname"
+ },
+ "/bin/cp -f /build/temp/mySecureFileId.mobileprovision /users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision": {
+ "code": 0,
+ "stdout": "provisioning profile copied"
+ },
+ "/bin/rm -f _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "delete output here"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/L0SourceRepository.ts b/_generated/InstallAppleProvisioningProfileV1/Tests/L0SourceRepository.ts
new file mode 100644
index 000000000000..935f7343882c
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/L0SourceRepository.ts
@@ -0,0 +1,71 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'installprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'sourceRepository');
+tr.setInput('provProfileSourceRepository', '/build/source/myprovisioningprofile.mobileprovision');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/libexec/PlistBuddy": true,
+ "/bin/rm": true,
+ "/bin/cp": true
+ },
+ "exist": {
+ "/build/source/myprovisioningprofile.mobileprovision": true
+ },
+ "stats": {
+ "/build/source/myprovisioningprofile.mobileprovision": {
+ "isFile": true
+ }
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/source/myprovisioningprofile.mobileprovision": {
+ "code": 0,
+ "stdout": "prov profile details here"
+ },
+ "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testuuid"
+ },
+ "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testprovname"
+ },
+ "/bin/cp -f /build/source/myprovisioningprofile.mobileprovision /users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision": {
+ "code": 0,
+ "stdout": "provisioning profile copied"
+ },
+ "/bin/rm -f _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "delete output here"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/L0SourceRepositoryProfileNotFound.ts b/_generated/InstallAppleProvisioningProfileV1/Tests/L0SourceRepositoryProfileNotFound.ts
new file mode 100644
index 000000000000..1a6636b5d70a
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/L0SourceRepositoryProfileNotFound.ts
@@ -0,0 +1,32 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'installprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'sourceRepository');
+tr.setInput('provProfileSourceRepository', '/build/source/doesnotexist.provisionprofile');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "/build/source/doesnotexist.provisionprofile": false
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/package-lock.json b/_generated/InstallAppleProvisioningProfileV1/Tests/package-lock.json
new file mode 100644
index 000000000000..0ada066fbb1f
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/_generated/InstallAppleProvisioningProfileV1/Tests/package.json b/_generated/InstallAppleProvisioningProfileV1/Tests/package.json
new file mode 100644
index 000000000000..f0ab0daa9f61
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install Apple Provisioning Profile Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.7"
+ }
+}
diff --git a/_generated/InstallAppleProvisioningProfileV1/ThirdPartyNotice.txt b/_generated/InstallAppleProvisioningProfileV1/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..405cdc560de1
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/ThirdPartyNotice.txt
@@ -0,0 +1,412 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (InstallAppleProvisioningProfileV1) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/mocha (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+3. balanced-match (git://github.com/juliangruber/balanced-match.git)
+4. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+5. concat-map (git://github.com/substack/node-concat-map.git)
+6. minimatch (git://github.com/isaacs/minimatch.git)
+7. mockery (git://github.com/mfncooper/mockery.git)
+8. q (git://github.com/kriskowal/q.git)
+9. semver (git+https://github.com/npm/node-semver.git)
+10. shelljs (git://github.com/arturadib/shelljs.git)
+11. tunnel (git+https://github.com/koichik/node-tunnel.git)
+12. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+13. underscore (git://github.com/jashkenas/underscore.git)
+14. uuid (git+https://github.com/kelektiv/node-uuid.git)
+15. vso-node-api (git+https://github.com/Microsoft/vso-node-api.git)
+16. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git)
+
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
+%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF vso-node-api NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF vsts-task-lib NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/icon.png b/_generated/InstallAppleProvisioningProfileV1/icon.png
new file mode 100644
index 000000000000..5dda42229aad
Binary files /dev/null and b/_generated/InstallAppleProvisioningProfileV1/icon.png differ
diff --git a/_generated/InstallAppleProvisioningProfileV1/icon.svg b/_generated/InstallAppleProvisioningProfileV1/icon.svg
new file mode 100644
index 000000000000..74474e20632b
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/icon.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_generated/InstallAppleProvisioningProfileV1/installprovprofile.ts b/_generated/InstallAppleProvisioningProfileV1/installprovprofile.ts
new file mode 100644
index 000000000000..f5b7e41d76a3
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/installprovprofile.ts
@@ -0,0 +1,43 @@
+import path = require('path');
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import secureFilesCommon = require('azure-pipelines-tasks-securefiles-common/securefiles-common');
+import tl = require('azure-pipelines-task-lib/task');
+import os = require('os');
+
+async function run() {
+ let secureFileId: string;
+ let secureFileHelpers: secureFilesCommon.SecureFileHelpers;
+
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ throw new Error(tl.loc('InstallRequiresMac'));
+ }
+
+ if (tl.getInput('provisioningProfileLocation') === 'sourceRepository') {
+ let provProfilePath: string = tl.getInput('provProfileSourceRepository', true);
+
+ if (tl.filePathSupplied('provProfileSourceRepository') && tl.exist(provProfilePath) && tl.stats(provProfilePath).isFile()) {
+ const info = await sign.installProvisioningProfile(provProfilePath);
+ tl.setTaskVariable('APPLE_PROV_PROFILE_UUID', info.provProfileUUID);
+
+ // set the provisioning profile output variable.
+ tl.setVariable('provisioningProfileUuid', info.provProfileUUID);
+ tl.setVariable('provisioningProfileName', info.provProfileName);
+
+ // Set the legacy variable that doesn't use the task's refName, unlike our output variables.
+ // If there are multiple InstallAppleCertificate tasks, the last one wins.
+ tl.setVariable('APPLE_PROV_PROFILE_UUID', info.provProfileUUID);
+ } else {
+ throw tl.loc('InputProvisioningProfileNotFound', provProfilePath);
+ }
+ }
+
+ } catch (err) {
+ tl.setResult(tl.TaskResult.Failed, err);
+ }
+}
+
+run();
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/make.json b/_generated/InstallAppleProvisioningProfileV1/make.json
new file mode 100644
index 000000000000..a935c9e8b738
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/make.json
@@ -0,0 +1,11 @@
+{
+ "rm": [
+ {
+ "items": [
+ "node_modules/azure-pipelines-tasks-ios-signing-common/node_modules/azure-pipelines-task-lib",
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
+ ],
+ "options": "-Rf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/package-lock.json b/_generated/InstallAppleProvisioningProfileV1/package-lock.json
new file mode 100644
index 000000000000..0938c834cced
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/package-lock.json
@@ -0,0 +1,579 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "16.11.62",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.62.tgz",
+ "integrity": "sha512-K/ggecSdwAAy2NUW4WKmF4Rc03GKbsfP+k326UWgckoS+Rzd2PaWbjk76dSmqdLQvLTJAO9axiTUJ6488mFsYQ=="
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-ios-signing-common": {
+ "version": "2.0.3-preview",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-ios-signing-common/-/azure-pipelines-tasks-ios-signing-common-2.0.3-preview.tgz",
+ "integrity": "sha512-Q973Mzd4ciIH+U9SvY5Cx5YsTOHHt8FiNY6+x/6fmAnKIjEc4VoYzJG5Qk3xNt+KMjrYxPakpQHqWNdPwgAo7Q==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-pipelines-task-lib": "^3.0.6-preview.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz",
+ "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz",
+ "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.1",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz",
+ "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.5",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.5.tgz",
+ "integrity": "sha512-952/Aegu3lTqUAI1anbDLbewojnF/gh8at9iy1CIrfS1h/+MtNjB1Y9z6ZF5n2kZd+97em56lZ9uu7Zz3y/pwg==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz",
+ "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/InstallAppleProvisioningProfileV1/package.json b/_generated/InstallAppleProvisioningProfileV1/package.json
new file mode 100644
index 000000000000..4aa0623b9655
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile",
+ "version": "1.0.0",
+ "description": "Azure Pipelines InstallAppleProvisioningProfile Task",
+ "main": "preinstallprovprofile.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "azure-pipelines-tasks-ios-signing-common": "2.0.3-preview",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^16.11.39"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/_generated/InstallAppleProvisioningProfileV1/postinstallprovprofile.ts b/_generated/InstallAppleProvisioningProfileV1/postinstallprovprofile.ts
new file mode 100644
index 000000000000..b7442f677255
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/postinstallprovprofile.ts
@@ -0,0 +1,27 @@
+import path = require('path');
+import tl = require('azure-pipelines-task-lib/task');
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import os = require('os');
+
+async function run() {
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ console.log(tl.loc('InstallRequiresMac'));
+ } else {
+ let removeProfile: boolean = tl.getBoolInput('removeProfile');
+ if (removeProfile) {
+ let profileUUID: string = tl.getTaskVariable('APPLE_PROV_PROFILE_UUID');
+ if (profileUUID) {
+ await sign.deleteProvisioningProfile(profileUUID);
+ }
+ }
+ }
+ } catch (err) {
+ tl.warning(err);
+ }
+}
+
+run();
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/preinstallprovprofile.ts b/_generated/InstallAppleProvisioningProfileV1/preinstallprovprofile.ts
new file mode 100644
index 000000000000..9de1001c510d
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/preinstallprovprofile.ts
@@ -0,0 +1,55 @@
+import path = require('path');
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import secureFilesCommon = require('azure-pipelines-tasks-securefiles-common/securefiles-common');
+import tl = require('azure-pipelines-task-lib/task');
+import os = require('os');
+
+const retryCount = 8;
+
+async function run() {
+ let secureFileId: string;
+ let secureFileHelpers: secureFilesCommon.SecureFileHelpers;
+
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ throw new Error(tl.loc('InstallRequiresMac'));
+ }
+
+ if (tl.getInput('provisioningProfileLocation') === 'secureFiles') {
+ // download decrypted contents
+ secureFileId = tl.getInput('provProfileSecureFile', true);
+ secureFileHelpers = new secureFilesCommon.SecureFileHelpers(retryCount);
+ let provProfilePath: string = await secureFileHelpers.downloadSecureFile(secureFileId);
+
+ if (tl.exist(provProfilePath)) {
+ if (!provProfilePath.endsWith(".mobileprovision") &&
+ !provProfilePath.endsWith(".provisionprofile")) {
+ throw new Error(tl.loc('InvalidMobileProvisionFileExtension'));
+ }
+ const info = await sign.installProvisioningProfile(provProfilePath);
+ tl.setTaskVariable('APPLE_PROV_PROFILE_UUID', info.provProfileUUID);
+
+ // set the provisioning profile output variable.
+ tl.setVariable('provisioningProfileUuid', info.provProfileUUID);
+ tl.setVariable('provisioningProfileName', info.provProfileName);
+
+ // Set the legacy variable that doesn't use the task's refName, unlike our output variables.
+ // If there are multiple InstallAppleCertificate tasks, the last one wins.
+ tl.setVariable('APPLE_PROV_PROFILE_UUID', info.provProfileUUID);
+ }
+ }
+
+ } catch (err) {
+ tl.setResult(tl.TaskResult.Failed, err);
+ } finally {
+ // delete provisioning profile from temp location after installing
+ if (secureFileId && secureFileHelpers) {
+ secureFileHelpers.deleteSecureFile(secureFileId);
+ }
+ }
+}
+
+run();
diff --git a/_generated/InstallAppleProvisioningProfileV1/task.json b/_generated/InstallAppleProvisioningProfileV1/task.json
new file mode 100644
index 000000000000..9f1f9fd5dd7b
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/task.json
@@ -0,0 +1,129 @@
+{
+ "id": "0f9f66ca-250e-40fd-9678-309bcd439d5e",
+ "name": "InstallAppleProvisioningProfile",
+ "friendlyName": "Install Apple provisioning profile",
+ "description": "Install an Apple provisioning profile required to build on a macOS agent machine",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-apple-provisioning-profile",
+ "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 1,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [
+ "xcode"
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "Install an Apple provisioning profile",
+ "inputs": [
+ {
+ "name": "provisioningProfileLocation",
+ "type": "pickList",
+ "label": "Provisioning profile location",
+ "defaultValue": "secureFiles",
+ "required": true,
+ "options": {
+ "secureFiles": "Secure Files",
+ "sourceRepository": "Source Repository"
+ },
+ "helpMarkDown": "Select the location of the provisioning profile to install. The provisioning profile can be uploaded to `Secure Files` or stored in your source repository or a local path on the agent."
+ },
+ {
+ "name": "provProfileSecureFile",
+ "type": "secureFile",
+ "label": "Provisioning profile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the provisioning profile that was uploaded to `Secure Files` to install on the macOS agent.",
+ "visibleRule": "provisioningProfileLocation == secureFiles"
+ },
+ {
+ "name": "provProfileSourceRepository",
+ "type": "filePath",
+ "label": "Provisioning profile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the provisioning profile from the source repository or specify the local path to a provisioning profile on the macOS agent.",
+ "visibleRule": "provisioningProfileLocation == sourceRepository"
+ },
+ {
+ "name": "removeProfile",
+ "type": "boolean",
+ "label": "Remove profile after build",
+ "defaultValue": true,
+ "required": false,
+ "helpMarkDown": "Select to specify that the provisioning profile should be removed from the agent after the build or release is complete."
+ }
+ ],
+ "outputVariables": [
+ {
+ "name": "provisioningProfileUuid",
+ "description": "The UUID property for the selected provisioning profile."
+ },
+ {
+ "name": "provisioningProfileName",
+ "description": "The Name property for the selected provisioning profile."
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "execution": {
+ "Node10": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "provisioningProfileUuid",
+ "provisioningProfileName",
+ "APPLE_PROV_PROFILE_UUID"
+ ]
+ }
+ },
+ "messages": {
+ "InputProvisioningProfileNotFound": "Provisioning profile to be installed was not found at %s. Specify the full file path to a provisioning profile.",
+ "InstallRequiresMac": "Install Apple Provisioning Profile requires a macOS agent. Installing on Windows or Linux is not supported by Apple.",
+ "InvalidMobileProvisionFileExtension": "Provisioning profile file should have the extension '.mobileprovision' or '.provisionprofile'"
+ },
+ "_buildConfigMapping": {
+ "Default": "1.229.3",
+ "Node20-225": "1.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/task.loc.json b/_generated/InstallAppleProvisioningProfileV1/task.loc.json
new file mode 100644
index 000000000000..4db674a97808
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/task.loc.json
@@ -0,0 +1,129 @@
+{
+ "id": "0f9f66ca-250e-40fd-9678-309bcd439d5e",
+ "name": "InstallAppleProvisioningProfile",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-apple-provisioning-profile",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 1,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [
+ "xcode"
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "inputs": [
+ {
+ "name": "provisioningProfileLocation",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.provisioningProfileLocation",
+ "defaultValue": "secureFiles",
+ "required": true,
+ "options": {
+ "secureFiles": "Secure Files",
+ "sourceRepository": "Source Repository"
+ },
+ "helpMarkDown": "ms-resource:loc.input.help.provisioningProfileLocation"
+ },
+ {
+ "name": "provProfileSecureFile",
+ "type": "secureFile",
+ "label": "ms-resource:loc.input.label.provProfileSecureFile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.provProfileSecureFile",
+ "visibleRule": "provisioningProfileLocation == secureFiles"
+ },
+ {
+ "name": "provProfileSourceRepository",
+ "type": "filePath",
+ "label": "ms-resource:loc.input.label.provProfileSourceRepository",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.provProfileSourceRepository",
+ "visibleRule": "provisioningProfileLocation == sourceRepository"
+ },
+ {
+ "name": "removeProfile",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.removeProfile",
+ "defaultValue": true,
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.removeProfile"
+ }
+ ],
+ "outputVariables": [
+ {
+ "name": "provisioningProfileUuid",
+ "description": "The UUID property for the selected provisioning profile."
+ },
+ {
+ "name": "provisioningProfileName",
+ "description": "The Name property for the selected provisioning profile."
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "execution": {
+ "Node10": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "provisioningProfileUuid",
+ "provisioningProfileName",
+ "APPLE_PROV_PROFILE_UUID"
+ ]
+ }
+ },
+ "messages": {
+ "InputProvisioningProfileNotFound": "ms-resource:loc.messages.InputProvisioningProfileNotFound",
+ "InstallRequiresMac": "ms-resource:loc.messages.InstallRequiresMac",
+ "InvalidMobileProvisionFileExtension": "ms-resource:loc.messages.InvalidMobileProvisionFileExtension"
+ },
+ "_buildConfigMapping": {
+ "Default": "1.229.3",
+ "Node20-225": "1.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1/tsconfig.json b/_generated/InstallAppleProvisioningProfileV1/tsconfig.json
new file mode 100644
index 000000000000..0438b79f69ac
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/.npmrc b/_generated/InstallAppleProvisioningProfileV1_Node20/.npmrc
new file mode 100644
index 000000000000..5fca0d518be7
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/.npmrc
@@ -0,0 +1 @@
+scripts-prepend-node-path=true
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..4759dea8dd50
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Apple-Bereitstellungsprofil installieren",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Hiermit wird ein Apple-Bereitstellungsprofil installiert, das für den Buildvorgang auf einem macOS-Agent-Computer erforderlich ist.",
+ "loc.instanceNameFormat": "Installieren Sie ein Apple-Bereitstellungsprofil.",
+ "loc.input.label.provisioningProfileLocation": "Speicherort des Bereitstellungsprofils",
+ "loc.input.help.provisioningProfileLocation": "Wählen Sie den Speicherort des Bereitstellungsprofils aus, das installiert werden soll. Das Bereitstellungsprofil kann in \"Sichere Dateien\" hochgeladen oder in Ihrem Quellrepository oder in einem lokalen Pfad auf dem Agent gespeichert werden.",
+ "loc.input.label.provProfileSecureFile": "Bereitstellungsprofil",
+ "loc.input.help.provProfileSecureFile": "Wählen Sie das Bereitstellungsprofil aus, das in \"Secure Files\" (sSichere Dateien) für die Installation auf dem macOS-Agent hochgeladen wurde.",
+ "loc.input.label.provProfileSourceRepository": "Profil wird bereitgestellt",
+ "loc.input.help.provProfileSourceRepository": "Wählen Sie das Bereitstellungsprofil aus dem Quellrepository aus, oder geben Sie den lokalen Pfad zu einem Bereitstellungsprofil auf dem macOS-Agent an.",
+ "loc.input.label.removeProfile": "Profil nach Buildvorgang entfernen",
+ "loc.input.help.removeProfile": "Wählen Sie dies aus, um anzugeben, dass das Bereitstellungsprofil nach Abschluss des Builds oder der Release aus dem Agent entfernt werden soll.",
+ "loc.messages.InputProvisioningProfileNotFound": "Das zu installierende Bereitstellungsprofil wurde nicht unter \"%s\" gefunden. Geben Sie den vollständigen Pfad zu einem Bereitstellungsprofil an.",
+ "loc.messages.InstallRequiresMac": "Für die Installation eines Apple-Bereitstellungsprofils ist ein macOS-Agent erforderlich. Eine Installation unter Windows oder Linux wird von Apple nicht unterstützt.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "Die Bereitstellungsprofildatei muss die Erweiterung \".mobileprovision\" oder \".provisionprofile\" aufweisen."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..dc2464dbc874
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Install Apple provisioning profile",
+ "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Install an Apple provisioning profile required to build on a macOS agent machine",
+ "loc.instanceNameFormat": "Install an Apple provisioning profile",
+ "loc.input.label.provisioningProfileLocation": "Provisioning profile location",
+ "loc.input.help.provisioningProfileLocation": "Select the location of the provisioning profile to install. The provisioning profile can be uploaded to `Secure Files` or stored in your source repository or a local path on the agent.",
+ "loc.input.label.provProfileSecureFile": "Provisioning profile",
+ "loc.input.help.provProfileSecureFile": "Select the provisioning profile that was uploaded to `Secure Files` to install on the macOS agent.",
+ "loc.input.label.provProfileSourceRepository": "Provisioning profile",
+ "loc.input.help.provProfileSourceRepository": "Select the provisioning profile from the source repository or specify the local path to a provisioning profile on the macOS agent.",
+ "loc.input.label.removeProfile": "Remove profile after build",
+ "loc.input.help.removeProfile": "Select to specify that the provisioning profile should be removed from the agent after the build or release is complete.",
+ "loc.messages.InputProvisioningProfileNotFound": "Provisioning profile to be installed was not found at %s. Specify the full file path to a provisioning profile.",
+ "loc.messages.InstallRequiresMac": "Install Apple Provisioning Profile requires a macOS agent. Installing on Windows or Linux is not supported by Apple.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "Provisioning profile file should have the extension '.mobileprovision' or '.provisionprofile'"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..a60a547449c2
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Instalar perfil de aprovisionamiento de Apple",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Instale un perfil de aprovisionamiento de Apple necesario para compilar en una máquina de agente de macOS.",
+ "loc.instanceNameFormat": "Instalar un perfil de aprovisionamiento de Apple",
+ "loc.input.label.provisioningProfileLocation": "Ubicación del perfil de aprovisionamiento",
+ "loc.input.help.provisioningProfileLocation": "Seleccione la ubicación del perfil de aprovisionamiento que se va a instalar. El perfil de aprovisionamiento puede cargarse en \"Archivos seguros\" o almacenarse en el repositorio de origen o una ruta de acceso local en el agente.",
+ "loc.input.label.provProfileSecureFile": "Perfil de aprovisionamiento",
+ "loc.input.help.provProfileSecureFile": "Seleccione el perfil de aprovisionamiento que se cargó en los archivos seguros para instalarlo en el agente de macOS.",
+ "loc.input.label.provProfileSourceRepository": "Perfil de aprovisionamiento",
+ "loc.input.help.provProfileSourceRepository": "Seleccione el perfil de aprovisionamiento en el repositorio de origen o especifique la ruta de acceso local a un perfil de aprovisionamiento en el agente de macOS.",
+ "loc.input.label.removeProfile": "Quitar perfil después de la compilación",
+ "loc.input.help.removeProfile": "Seleccione esta opción para especificar que el perfil de aprovisionamiento debe quitarse del agente una vez finalizada la compilación o la versión.",
+ "loc.messages.InputProvisioningProfileNotFound": "El perfil de aprovisionamiento que se va a instalar no se encontró en %s. Especifique la ruta de acceso de archivo completa para un perfil de aprovisionamiento.",
+ "loc.messages.InstallRequiresMac": "La opción Instalar perfil de aprovisionamiento de Apple requiere un agente de macOS. Apple no admite la instalación en Windows o Linux.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "El archivo del perfil de aprovisionamiento debe tener la extensión \".mobileprovision\" o \".provisionprofile\"."
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..19a7bc0b94eb
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Installer le profil de provisionnement Apple",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Installer le profil de provisionnement Apple nécessaire pour effectuer une build sur une machine d'agent macOS",
+ "loc.instanceNameFormat": "Installer un profil d'approvisionnement Apple",
+ "loc.input.label.provisioningProfileLocation": "Emplacement du profil de provisionnement",
+ "loc.input.help.provisioningProfileLocation": "Sélectionnez l'emplacement du profil de provisionnement à installer. Vous pouvez charger le profil de provisionnement sur 'Fichiers sécurisés', ou le stocker dans votre dépôt source ou un chemin local sur l'agent.",
+ "loc.input.label.provProfileSecureFile": "Profil de provisionnement",
+ "loc.input.help.provProfileSecureFile": "Sélectionnez le profil d'approvisionnement chargé sur 'Fichiers sécurisés' pour installer l'agent macOS.",
+ "loc.input.label.provProfileSourceRepository": "Profil de provisionnement",
+ "loc.input.help.provProfileSourceRepository": "Sélectionnez le profil de provisionnement à partir du dépôt source, ou spécifiez le chemin local d'un profil de provisionnement sur l'agent macOS.",
+ "loc.input.label.removeProfile": "Supprimer le profil après la build",
+ "loc.input.help.removeProfile": "Spécifiez que le profil d'approvisionnement doit être supprimé de l'agent, une fois la build ou la mise en production effectuée.",
+ "loc.messages.InputProvisioningProfileNotFound": "Le profil de provisionnement à installer est introuvable sur %s. Spécifiez le chemin de fichier complet d'un profil de provisionnement.",
+ "loc.messages.InstallRequiresMac": "L'installation du profil de provisionnement Apple nécessite un agent macOS. L'installation sur Windows ou Linux n'est pas prise en charge par Apple.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "Le fichier de profil de provisionnement doit avoir l'extension '.mobileprovision' ou '.provisionprofile'"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..39a848fcb0dc
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Installa profilo di provisioning Apple",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Installa un profilo di provisioning Apple necessario per compilare in un computer agente macOS",
+ "loc.instanceNameFormat": "Installa un profilo di provisioning Apple",
+ "loc.input.label.provisioningProfileLocation": "Posizione del profilo di provisioning",
+ "loc.input.help.provisioningProfileLocation": "Consente di selezionare il percorso del profilo di provisioning da installare. Il profilo di provisioning può essere caricato in `File protetti` o archiviato nel repository di origine o in un percorso locale nell'agente.",
+ "loc.input.label.provProfileSecureFile": "Profilo di provisioning",
+ "loc.input.help.provProfileSecureFile": "Consente di selezionare il profilo di provisioning caricato in `File protetti` da installare nell'agente macOS.",
+ "loc.input.label.provProfileSourceRepository": "Profilo di provisioning",
+ "loc.input.help.provProfileSourceRepository": "Consente di selezionare il profilo di provisioning dal repository di origine o di specificare il percorso locale di un profilo di provisioning nell'agente macOS.",
+ "loc.input.label.removeProfile": "Rimuovi profilo dopo la compilazione",
+ "loc.input.help.removeProfile": "Selezionare questa opzione per specificare che il profilo di provisioning deve essere rimosso dall'agente al completamento della compilazione o della versione.",
+ "loc.messages.InputProvisioningProfileNotFound": "Il profilo di provisioning da installare non è stato trovato in %s. Specificare il percorso file completo di un profilo di provisioning.",
+ "loc.messages.InstallRequiresMac": "Per installare un profilo di provisioning Apple, è richiesto un agente macOS. L'installazione in Linux o Windows non è supportata da Apple.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "L'estensione del file del profilo di provisioning deve essere '.mobileprovision' o '.provisionprofile'"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..d2841f6fb371
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Apple プロビジョニング プロファイルのインストール",
+ "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "macOS エージェント マシン上でビルドを行うために必要な Apple プロビジョニング プロファイルをインストールします",
+ "loc.instanceNameFormat": "Apple プロビジョニング プロファイルのインストール",
+ "loc.input.label.provisioningProfileLocation": "プロビジョニング プロファイルの場所",
+ "loc.input.help.provisioningProfileLocation": "インストールするプロビジョニング プロファイルの場所を選択します。プロビジョニング プロファイルは、[セキュア ファイル] にアップロードすることもできますし、ソース リポジトリやエージェントのローカル パスに保管することもできます。",
+ "loc.input.label.provProfileSecureFile": "プロビジョニング プロファイル",
+ "loc.input.help.provProfileSecureFile": "macOS エージェントにインストールするため、`セキュア ファイル` にアップロードされたプロビジョニング プロファイルを選択します。",
+ "loc.input.label.provProfileSourceRepository": "プロビジョニング プロファイル",
+ "loc.input.help.provProfileSourceRepository": "ソース リポジトリからプロビジョニング プロファイルを選択するか、macOS エージェント上のプロビジョニング プロファイルのローカル パスを指定します。",
+ "loc.input.label.removeProfile": "ビルド後のプロファイル削除",
+ "loc.input.help.removeProfile": "ビルドまたはリリースが完了した後でエージェントからプロビジョニング プロファイルを削除するよう指定する場合に選択します。",
+ "loc.messages.InputProvisioningProfileNotFound": "インストールするプロビジョニング プロファイルが %s に見つかりませんでした。プロビジョニング プロファイルへの完全なファイル パスを指定してください。",
+ "loc.messages.InstallRequiresMac": "Apple プロビジョニング プロファイルのインストールには macOS エージェントが必要です。Apple は、Windows または Linux でのインストールをサポートしていません。",
+ "loc.messages.InvalidMobileProvisionFileExtension": "プロビジョニング プロファイル ファイルの拡張子は '.mobileprovision' または '.provisionprofile' でなければなりません"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..ae9d6192cc49
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Apple 권한 설정 프로파일 설치",
+ "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "빌드에 필요한 Apple 권한 설정 프로파일을 macOS 에이전트 머신에 설치합니다.",
+ "loc.instanceNameFormat": "Apple 권한 설정 프로파일 설치",
+ "loc.input.label.provisioningProfileLocation": "프로비전 프로필 위치",
+ "loc.input.help.provisioningProfileLocation": "설치할 프로비전 프로필의 위치를 선택합니다. 프로비전 프로필은 '보안 파일'에 업로드하거나 소스 리포지토리 또는 에이전트의 로컬 경로에 저장할 수 있습니다.",
+ "loc.input.label.provProfileSecureFile": "프로비전 프로필",
+ "loc.input.help.provProfileSecureFile": "macOS 에이전트에 설치할 '보안 파일'에 업로드된 프로비저닝 프로필을 선택합니다.",
+ "loc.input.label.provProfileSourceRepository": "프로비전 프로필",
+ "loc.input.help.provProfileSourceRepository": "소스 리포지토리에서 프로비전 프로필을 선택하거나 macOS 에이전트에 있는 프로비전 프로필의 로컬 경로를 지정합니다.",
+ "loc.input.label.removeProfile": "빌드 후 프로필 제거",
+ "loc.input.help.removeProfile": "빌드 또는 릴리스가 완료된 후에 에이전트에서 프로비저닝 프로필을 제거하도록 지정하려면 선택합니다.",
+ "loc.messages.InputProvisioningProfileNotFound": "설치할 프로비전 프로필이 %s에 없습니다. 프로비전 프로필의 전체 파일 경로를 지정하세요.",
+ "loc.messages.InstallRequiresMac": "Apple 권한 설정 프로파일을 설치하려면 macOS 에이전트가 필요합니다. Windows 또는 Linux에는 설치할 수 없습니다.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "프로비저닝 프로필 파일의 확장명은 '.mobileprovision' 또는 '.provisionprofile'이어야 함"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..9e5d2ab265ac
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "Установить профиль подготовки Apple",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "Установить профиль подготовки Apple, необходимый для сборки, на компьютер агента macOS",
+ "loc.instanceNameFormat": "Установка профиля подготовки Apple",
+ "loc.input.label.provisioningProfileLocation": "Расположение профиля подготовки",
+ "loc.input.help.provisioningProfileLocation": "Выберите расположение для установки профиля подготовки. Профиль подготовки можно отправить в раздел \"Безопасные файлы\" или сохранить в исходном репозитории либо в локальном каталоге на агенте.",
+ "loc.input.label.provProfileSecureFile": "Профиль подготовки",
+ "loc.input.help.provProfileSecureFile": "Выберите профиль подготовки, отправленный в \"Защитные файлы\", для установки на агент macOS.",
+ "loc.input.label.provProfileSourceRepository": "Профиль подготовки",
+ "loc.input.help.provProfileSourceRepository": "Выберите профиль подготовки из исходного репозитория или укажите локальный путь к профилю подготовки на агенте для macOS.",
+ "loc.input.label.removeProfile": "Удалить профиль после сборки",
+ "loc.input.help.removeProfile": "Выберите, чтобы указать, что по завершении сборки или версии профиль подготовки следует удалить с агента.",
+ "loc.messages.InputProvisioningProfileNotFound": "Устанавливаемый профиль подготовки не найден в %s. Укажите полный путь к профилю подготовки.",
+ "loc.messages.InstallRequiresMac": "Для установки профиля подготовки Apple требуется агент macOS. Установка в Linux или Windows не поддерживается Apple.",
+ "loc.messages.InvalidMobileProvisionFileExtension": "Файл профиля подготовки должен иметь расширение \"MOBILEPROVISION\" или \"PROVISIONPROFILE\""
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..2ae9192e3264
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "安装 Apple 预配配置文件",
+ "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "将生成所需的 Apple 预配配置文件安装到 macOS 代理计算机上",
+ "loc.instanceNameFormat": "安装 apple 预配配置文件",
+ "loc.input.label.provisioningProfileLocation": "预配配置文件位置",
+ "loc.input.help.provisioningProfileLocation": "选择要安装的预配配置文件的位置。可将预配配置文件上传到“安全文件”,或者存储在源存储库或代理上的本地路径中。",
+ "loc.input.label.provProfileSecureFile": "预配配置文件",
+ "loc.input.help.provProfileSecureFile": "选择已上传到“安全文件”的预配配置文件,将其安装到 macOS 代理上。",
+ "loc.input.label.provProfileSourceRepository": "预配配置文件",
+ "loc.input.help.provProfileSourceRepository": "从源存储库中选择预配配置文件,或指定 macOS 代理上预配配置文件的本地路径。",
+ "loc.input.label.removeProfile": "在生成后删除配置文件",
+ "loc.input.help.removeProfile": "选择指定在生成或发布完成后应从代理中删除预配配置文件。",
+ "loc.messages.InputProvisioningProfileNotFound": "未在 %s 处找到要安装的预配配置文件。指定预配配置文件的完整文件路径。",
+ "loc.messages.InstallRequiresMac": "安装 Apple 预配配置文件需要 macOS 代理。Apple 不支持在 Windows 或 Linux 上进行安装。",
+ "loc.messages.InvalidMobileProvisionFileExtension": "预配配置文件应带有 \".mobileprovision\" 或 \".provisionprofile\" 扩展名"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..c460fd3e24b8
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,17 @@
+{
+ "loc.friendlyName": "安裝 Apple 佈建設定檔",
+ "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "loc.description": "在 macOS 代理程式電腦上執行建置作業必須安裝 Apple 佈建設定檔",
+ "loc.instanceNameFormat": "安裝 Apple 佈建設定檔",
+ "loc.input.label.provisioningProfileLocation": "佈建設定檔位置",
+ "loc.input.help.provisioningProfileLocation": "選取佈建設定檔的安裝位置。您可將佈建設定檔上傳至 `Secure Files`,或儲存在來源存放庫/代理程式上的本機路徑。",
+ "loc.input.label.provProfileSecureFile": "正在佈建設定檔",
+ "loc.input.help.provProfileSecureFile": "請選取已上傳到 [安全檔案] 的佈建設定檔,以安裝在 macOS 代理程式上。",
+ "loc.input.label.provProfileSourceRepository": "正在佈建設定檔",
+ "loc.input.help.provProfileSourceRepository": "從來源存放庫選取佈建設定檔,或指定 macOS 代理程式上的佈建設定檔本機路徑。",
+ "loc.input.label.removeProfile": "在建置後移除設定檔",
+ "loc.input.help.removeProfile": "選取此選項可指定在建置或發行完成之後,從代理程式刪除佈建設定檔。",
+ "loc.messages.InputProvisioningProfileNotFound": "無法在 %s 找到要安裝的佈建設定檔。請指定完整的佈建設定檔檔案路徑。",
+ "loc.messages.InstallRequiresMac": "必須有 macOS 代理程式才能安裝 Apple 佈建設定檔。Apple 不支援在 Windows 或 Linux 上安裝。",
+ "loc.messages.InvalidMobileProvisionFileExtension": "佈建設定檔的副檔名應為 '.mobileprovision' 或 '.provisionprofile'"
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0.ts
new file mode 100644
index 000000000000..81ead0e0992c
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0.ts
@@ -0,0 +1,109 @@
+import fs = require('fs');
+import assert = require('assert');
+import path = require('path');
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('InstallAppleProvisioningProfile Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000);
+ before(() => {
+ });
+
+ after(() => {
+ });
+
+ it('Defaults: install from SecureFile', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0SecureFile.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security cms -D -i /build/temp/mySecureFileId.mobileprovision'),
+ 'provisioning profile should have been installed.')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Install from source repository', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0SourceRepository.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security cms -D -i /build/source/myprovisioningprofile.mobileprovision'),
+ 'provisioning profile should have been installed.')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Install from source repository fails if provisioning profile is not found', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0SourceRepositoryProfileNotFound.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+ let expectedErr: string = "loc_mock_InputProvisioningProfileNotFound /build/source/doesnotexist.provisionprofile";
+ assert(tr.stderr.length > 0 || tr.errorIssues.length > 0, 'should have written to stderr');
+ assert(tr.stdErrContained(expectedErr) || tr.createdErrorIssue(expectedErr), 'Error message should have said: ' + expectedErr);
+ assert(tr.failed, 'task should have failed');
+
+ done();
+ });
+
+ it('Install profile file with no file extension', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0ProfileNoExtension.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/usr/bin/security cms -D -i /build/source/myprovisioningprofile'),
+ 'provisioning profile should have been installed.');
+ assert(tr.ran('/bin/cp -f /build/source/myprovisioningprofile /users/test/Library/MobileDevice/Provisioning Profiles/testuuid'),
+ 'copied provisioning profile should not have an extension');
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Remove profile during post execution', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0RemoveProfile.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.ran('/bin/rm -f /users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision'),
+ 'provisioning profile should have been deleted.')
+ assert(tr.stderr.length === 0, 'should not have written to stderr');
+ assert(tr.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Fails on windows', (done: Mocha.Done) => {
+ let tp: string = path.join(__dirname, 'L0FailOnWindows.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.failed, 'task should have failed');
+ assert(tr.errorIssues.length > 0, 'should have written to stderr');
+ assert(tr.errorIssues[0].indexOf('Error: loc_mock_InstallRequiresMac') >= 0, 'error message should match expected');
+
+ done();
+ });
+
+ it('postexecution should not fail for errors', function (done: Mocha.Done) {
+ let tp: string = path.join(__dirname, 'L0ErrorsInPostExecutionJob.js');
+ let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ tr.run();
+
+ assert(tr.succeeded, 'postexecutionjob should have succeeded with warnings even when there are errors.');
+ assert(tr.stdout.indexOf('InstallRequiresMac'), 'warning for macos requirement should be shown.');
+
+ done();
+ });
+});
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0ErrorsInPostExecutionJob.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0ErrorsInPostExecutionJob.ts
new file mode 100644
index 000000000000..af84cc84e78f
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0ErrorsInPostExecutionJob.ts
@@ -0,0 +1,29 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'secureFiles');
+tr.setInput('provProfileSecureFile', 'mySecureFileId');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'win32';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0FailOnWindows.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0FailOnWindows.ts
new file mode 100644
index 000000000000..8cb6b97890a5
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0FailOnWindows.ts
@@ -0,0 +1,29 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'secureFiles');
+tr.setInput('provProfileSecureFile', 'mySecureFileId');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'win32';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0ProfileNoExtension.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0ProfileNoExtension.ts
new file mode 100644
index 000000000000..95708122a313
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0ProfileNoExtension.ts
@@ -0,0 +1,71 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'installprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'sourceRepository');
+tr.setInput('provProfileSourceRepository', '/build/source/myprovisioningprofile');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/libexec/PlistBuddy": true,
+ "/bin/rm": true,
+ "/bin/cp": true
+ },
+ "exist": {
+ "/build/source/myprovisioningprofile": true
+ },
+ "stats": {
+ "/build/source/myprovisioningprofile": {
+ "isFile": true
+ }
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/source/myprovisioningprofile": {
+ "code": 0,
+ "stdout": "prov profile details here"
+ },
+ "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testuuid"
+ },
+ "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testprovname"
+ },
+ "/bin/cp -f /build/source/myprovisioningprofile /users/test/Library/MobileDevice/Provisioning Profiles/testuuid": {
+ "code": 0,
+ "stdout": "provisioning profile copied"
+ },
+ "/bin/rm -f _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "delete output here"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0RemoveProfile.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0RemoveProfile.ts
new file mode 100644
index 000000000000..adac54fdfe2c
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0RemoveProfile.ts
@@ -0,0 +1,47 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'postinstallprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('removeProfile', 'true');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['VSTS_TASKVARIABLE_APPLE_PROV_PROFILE_UUID'] = 'testuuid';
+process.env['HOME'] = '/users/test';
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "rm": "/bin/rm"
+ },
+ "checkPath": {
+ "/bin/rm": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true,
+ "/users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision": true
+ },
+ "findMatch": {
+ "testuuid*": [
+ "/users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision"
+ ]
+ },
+ "exec": {
+ "/bin/rm -f /users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision": {
+ "code": 0,
+ "stdout": "delete output here"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SecureFile.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SecureFile.ts
new file mode 100644
index 000000000000..5157d2298e49
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SecureFile.ts
@@ -0,0 +1,68 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'preinstallprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'secureFiles');
+tr.setInput('provProfileSecureFile', 'mySecureFileId');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+const secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+secureFileHelperMock.SecureFileHelpers.setFileExtension(".mobileprovision");
+
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/libexec/PlistBuddy": true,
+ "/bin/rm": true,
+ "/bin/cp": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.mobileprovision": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.mobileprovision": {
+ "code": 0,
+ "stdout": "prov profile details here"
+ },
+ "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testuuid"
+ },
+ "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testprovname"
+ },
+ "/bin/cp -f /build/temp/mySecureFileId.mobileprovision /users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision": {
+ "code": 0,
+ "stdout": "provisioning profile copied"
+ },
+ "/bin/rm -f _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "delete output here"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SourceRepository.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SourceRepository.ts
new file mode 100644
index 000000000000..935f7343882c
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SourceRepository.ts
@@ -0,0 +1,71 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'installprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'sourceRepository');
+tr.setInput('provProfileSourceRepository', '/build/source/myprovisioningprofile.mobileprovision');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/libexec/PlistBuddy": true,
+ "/bin/rm": true,
+ "/bin/cp": true
+ },
+ "exist": {
+ "/build/source/myprovisioningprofile.mobileprovision": true
+ },
+ "stats": {
+ "/build/source/myprovisioningprofile.mobileprovision": {
+ "isFile": true
+ }
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/source/myprovisioningprofile.mobileprovision": {
+ "code": 0,
+ "stdout": "prov profile details here"
+ },
+ "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testuuid"
+ },
+ "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "testprovname"
+ },
+ "/bin/cp -f /build/source/myprovisioningprofile.mobileprovision /users/test/Library/MobileDevice/Provisioning Profiles/testuuid.mobileprovision": {
+ "code": 0,
+ "stdout": "provisioning profile copied"
+ },
+ "/bin/rm -f _xcodetasktmp.plist": {
+ "code": 0,
+ "stdout": "delete output here"
+ }
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SourceRepositoryProfileNotFound.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SourceRepositoryProfileNotFound.ts
new file mode 100644
index 000000000000..1a6636b5d70a
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/L0SourceRepositoryProfileNotFound.ts
@@ -0,0 +1,32 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import os = require('os');
+
+let taskPath = path.join(__dirname, '..', 'installprovprofile.js');
+let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('provisioningProfileLocation', 'sourceRepository');
+tr.setInput('provProfileSourceRepository', '/build/source/doesnotexist.provisionprofile');
+
+process.env['AGENT_VERSION'] = '2.116.0';
+process.env['HOME'] = '/users/test';
+
+let secureFileHelperMock = require('azure-pipelines-tasks-securefiles-common/securefiles-common-mock');
+tr.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+// provide answers for task mock
+let a: ma.TaskLibAnswers = {
+ "exist": {
+ "/build/source/doesnotexist.provisionprofile": false
+ }
+};
+tr.setAnswers(a);
+
+os.platform = () => {
+ return 'darwin';
+}
+tr.registerMock('os', os);
+
+tr.run();
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/package-lock.json b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..0ada066fbb1f
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
+ "dev": true
+ }
+ }
+}
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/package.json b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/package.json
new file mode 100644
index 000000000000..f0ab0daa9f61
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install Apple Provisioning Profile Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.7"
+ }
+}
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/ThirdPartyNotice.txt b/_generated/InstallAppleProvisioningProfileV1_Node20/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..405cdc560de1
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/ThirdPartyNotice.txt
@@ -0,0 +1,412 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (InstallAppleProvisioningProfileV1) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/mocha (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+3. balanced-match (git://github.com/juliangruber/balanced-match.git)
+4. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+5. concat-map (git://github.com/substack/node-concat-map.git)
+6. minimatch (git://github.com/isaacs/minimatch.git)
+7. mockery (git://github.com/mfncooper/mockery.git)
+8. q (git://github.com/kriskowal/q.git)
+9. semver (git+https://github.com/npm/node-semver.git)
+10. shelljs (git://github.com/arturadib/shelljs.git)
+11. tunnel (git+https://github.com/koichik/node-tunnel.git)
+12. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+13. underscore (git://github.com/jashkenas/underscore.git)
+14. uuid (git+https://github.com/kelektiv/node-uuid.git)
+15. vso-node-api (git+https://github.com/Microsoft/vso-node-api.git)
+16. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git)
+
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
+%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF vso-node-api NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF vsts-task-lib NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/icon.png b/_generated/InstallAppleProvisioningProfileV1_Node20/icon.png
new file mode 100644
index 000000000000..5dda42229aad
Binary files /dev/null and b/_generated/InstallAppleProvisioningProfileV1_Node20/icon.png differ
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/icon.svg b/_generated/InstallAppleProvisioningProfileV1_Node20/icon.svg
new file mode 100644
index 000000000000..74474e20632b
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/icon.svg
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/installprovprofile.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/installprovprofile.ts
new file mode 100644
index 000000000000..f5b7e41d76a3
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/installprovprofile.ts
@@ -0,0 +1,43 @@
+import path = require('path');
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import secureFilesCommon = require('azure-pipelines-tasks-securefiles-common/securefiles-common');
+import tl = require('azure-pipelines-task-lib/task');
+import os = require('os');
+
+async function run() {
+ let secureFileId: string;
+ let secureFileHelpers: secureFilesCommon.SecureFileHelpers;
+
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ throw new Error(tl.loc('InstallRequiresMac'));
+ }
+
+ if (tl.getInput('provisioningProfileLocation') === 'sourceRepository') {
+ let provProfilePath: string = tl.getInput('provProfileSourceRepository', true);
+
+ if (tl.filePathSupplied('provProfileSourceRepository') && tl.exist(provProfilePath) && tl.stats(provProfilePath).isFile()) {
+ const info = await sign.installProvisioningProfile(provProfilePath);
+ tl.setTaskVariable('APPLE_PROV_PROFILE_UUID', info.provProfileUUID);
+
+ // set the provisioning profile output variable.
+ tl.setVariable('provisioningProfileUuid', info.provProfileUUID);
+ tl.setVariable('provisioningProfileName', info.provProfileName);
+
+ // Set the legacy variable that doesn't use the task's refName, unlike our output variables.
+ // If there are multiple InstallAppleCertificate tasks, the last one wins.
+ tl.setVariable('APPLE_PROV_PROFILE_UUID', info.provProfileUUID);
+ } else {
+ throw tl.loc('InputProvisioningProfileNotFound', provProfilePath);
+ }
+ }
+
+ } catch (err) {
+ tl.setResult(tl.TaskResult.Failed, err);
+ }
+}
+
+run();
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/make.json b/_generated/InstallAppleProvisioningProfileV1_Node20/make.json
new file mode 100644
index 000000000000..a935c9e8b738
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/make.json
@@ -0,0 +1,11 @@
+{
+ "rm": [
+ {
+ "items": [
+ "node_modules/azure-pipelines-tasks-ios-signing-common/node_modules/azure-pipelines-task-lib",
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
+ ],
+ "options": "-Rf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/package-lock.json b/_generated/InstallAppleProvisioningProfileV1_Node20/package-lock.json
new file mode 100644
index 000000000000..a8ef560fab49
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/package-lock.json
@@ -0,0 +1,586 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-ios-signing-common": {
+ "version": "2.0.3-preview",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-ios-signing-common/-/azure-pipelines-tasks-ios-signing-common-2.0.3-preview.tgz",
+ "integrity": "sha512-Q973Mzd4ciIH+U9SvY5Cx5YsTOHHt8FiNY6+x/6fmAnKIjEc4VoYzJG5Qk3xNt+KMjrYxPakpQHqWNdPwgAo7Q==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-pipelines-task-lib": "^3.0.6-preview.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/package.json b/_generated/InstallAppleProvisioningProfileV1_Node20/package.json
new file mode 100644
index 000000000000..41e98db54f59
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installappleprovisioningprofile",
+ "version": "1.0.0",
+ "description": "Azure Pipelines InstallAppleProvisioningProfile Task",
+ "main": "preinstallprovprofile.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "azure-pipelines-tasks-ios-signing-common": "2.0.3-preview",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^20.3.1"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/postinstallprovprofile.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/postinstallprovprofile.ts
new file mode 100644
index 000000000000..b7442f677255
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/postinstallprovprofile.ts
@@ -0,0 +1,27 @@
+import path = require('path');
+import tl = require('azure-pipelines-task-lib/task');
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import os = require('os');
+
+async function run() {
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ console.log(tl.loc('InstallRequiresMac'));
+ } else {
+ let removeProfile: boolean = tl.getBoolInput('removeProfile');
+ if (removeProfile) {
+ let profileUUID: string = tl.getTaskVariable('APPLE_PROV_PROFILE_UUID');
+ if (profileUUID) {
+ await sign.deleteProvisioningProfile(profileUUID);
+ }
+ }
+ }
+ } catch (err) {
+ tl.warning(err);
+ }
+}
+
+run();
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/preinstallprovprofile.ts b/_generated/InstallAppleProvisioningProfileV1_Node20/preinstallprovprofile.ts
new file mode 100644
index 000000000000..9de1001c510d
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/preinstallprovprofile.ts
@@ -0,0 +1,55 @@
+import path = require('path');
+import sign = require('azure-pipelines-tasks-ios-signing-common/ios-signing-common');
+import secureFilesCommon = require('azure-pipelines-tasks-securefiles-common/securefiles-common');
+import tl = require('azure-pipelines-task-lib/task');
+import os = require('os');
+
+const retryCount = 8;
+
+async function run() {
+ let secureFileId: string;
+ let secureFileHelpers: secureFilesCommon.SecureFileHelpers;
+
+ try {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // Check platform is macOS since demands are not evaluated on Hosted pools
+ if (os.platform() !== 'darwin') {
+ throw new Error(tl.loc('InstallRequiresMac'));
+ }
+
+ if (tl.getInput('provisioningProfileLocation') === 'secureFiles') {
+ // download decrypted contents
+ secureFileId = tl.getInput('provProfileSecureFile', true);
+ secureFileHelpers = new secureFilesCommon.SecureFileHelpers(retryCount);
+ let provProfilePath: string = await secureFileHelpers.downloadSecureFile(secureFileId);
+
+ if (tl.exist(provProfilePath)) {
+ if (!provProfilePath.endsWith(".mobileprovision") &&
+ !provProfilePath.endsWith(".provisionprofile")) {
+ throw new Error(tl.loc('InvalidMobileProvisionFileExtension'));
+ }
+ const info = await sign.installProvisioningProfile(provProfilePath);
+ tl.setTaskVariable('APPLE_PROV_PROFILE_UUID', info.provProfileUUID);
+
+ // set the provisioning profile output variable.
+ tl.setVariable('provisioningProfileUuid', info.provProfileUUID);
+ tl.setVariable('provisioningProfileName', info.provProfileName);
+
+ // Set the legacy variable that doesn't use the task's refName, unlike our output variables.
+ // If there are multiple InstallAppleCertificate tasks, the last one wins.
+ tl.setVariable('APPLE_PROV_PROFILE_UUID', info.provProfileUUID);
+ }
+ }
+
+ } catch (err) {
+ tl.setResult(tl.TaskResult.Failed, err);
+ } finally {
+ // delete provisioning profile from temp location after installing
+ if (secureFileId && secureFileHelpers) {
+ secureFileHelpers.deleteSecureFile(secureFileId);
+ }
+ }
+}
+
+run();
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/task.json b/_generated/InstallAppleProvisioningProfileV1_Node20/task.json
new file mode 100644
index 000000000000..5743463dc56c
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/task.json
@@ -0,0 +1,141 @@
+{
+ "id": "0f9f66ca-250e-40fd-9678-309bcd439d5e",
+ "name": "InstallAppleProvisioningProfile",
+ "friendlyName": "Install Apple provisioning profile",
+ "description": "Install an Apple provisioning profile required to build on a macOS agent machine",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-apple-provisioning-profile",
+ "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=862068)",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 1,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [
+ "xcode"
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "Install an Apple provisioning profile",
+ "inputs": [
+ {
+ "name": "provisioningProfileLocation",
+ "type": "pickList",
+ "label": "Provisioning profile location",
+ "defaultValue": "secureFiles",
+ "required": true,
+ "options": {
+ "secureFiles": "Secure Files",
+ "sourceRepository": "Source Repository"
+ },
+ "helpMarkDown": "Select the location of the provisioning profile to install. The provisioning profile can be uploaded to `Secure Files` or stored in your source repository or a local path on the agent."
+ },
+ {
+ "name": "provProfileSecureFile",
+ "type": "secureFile",
+ "label": "Provisioning profile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the provisioning profile that was uploaded to `Secure Files` to install on the macOS agent.",
+ "visibleRule": "provisioningProfileLocation == secureFiles"
+ },
+ {
+ "name": "provProfileSourceRepository",
+ "type": "filePath",
+ "label": "Provisioning profile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the provisioning profile from the source repository or specify the local path to a provisioning profile on the macOS agent.",
+ "visibleRule": "provisioningProfileLocation == sourceRepository"
+ },
+ {
+ "name": "removeProfile",
+ "type": "boolean",
+ "label": "Remove profile after build",
+ "defaultValue": true,
+ "required": false,
+ "helpMarkDown": "Select to specify that the provisioning profile should be removed from the agent after the build or release is complete."
+ }
+ ],
+ "outputVariables": [
+ {
+ "name": "provisioningProfileUuid",
+ "description": "The UUID property for the selected provisioning profile."
+ },
+ {
+ "name": "provisioningProfileName",
+ "description": "The Name property for the selected provisioning profile."
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "execution": {
+ "Node10": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "provisioningProfileUuid",
+ "provisioningProfileName",
+ "APPLE_PROV_PROFILE_UUID"
+ ]
+ }
+ },
+ "messages": {
+ "InputProvisioningProfileNotFound": "Provisioning profile to be installed was not found at %s. Specify the full file path to a provisioning profile.",
+ "InstallRequiresMac": "Install Apple Provisioning Profile requires a macOS agent. Installing on Windows or Linux is not supported by Apple.",
+ "InvalidMobileProvisionFileExtension": "Provisioning profile file should have the extension '.mobileprovision' or '.provisionprofile'"
+ },
+ "_buildConfigMapping": {
+ "Default": "1.229.3",
+ "Node20-225": "1.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/task.loc.json b/_generated/InstallAppleProvisioningProfileV1_Node20/task.loc.json
new file mode 100644
index 000000000000..98bf0bed0fc9
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/task.loc.json
@@ -0,0 +1,141 @@
+{
+ "id": "0f9f66ca-250e-40fd-9678-309bcd439d5e",
+ "name": "InstallAppleProvisioningProfile",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-apple-provisioning-profile",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 1,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [
+ "xcode"
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "inputs": [
+ {
+ "name": "provisioningProfileLocation",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.provisioningProfileLocation",
+ "defaultValue": "secureFiles",
+ "required": true,
+ "options": {
+ "secureFiles": "Secure Files",
+ "sourceRepository": "Source Repository"
+ },
+ "helpMarkDown": "ms-resource:loc.input.help.provisioningProfileLocation"
+ },
+ {
+ "name": "provProfileSecureFile",
+ "type": "secureFile",
+ "label": "ms-resource:loc.input.label.provProfileSecureFile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.provProfileSecureFile",
+ "visibleRule": "provisioningProfileLocation == secureFiles"
+ },
+ {
+ "name": "provProfileSourceRepository",
+ "type": "filePath",
+ "label": "ms-resource:loc.input.label.provProfileSourceRepository",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.provProfileSourceRepository",
+ "visibleRule": "provisioningProfileLocation == sourceRepository"
+ },
+ {
+ "name": "removeProfile",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.removeProfile",
+ "defaultValue": true,
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.removeProfile"
+ }
+ ],
+ "outputVariables": [
+ {
+ "name": "provisioningProfileUuid",
+ "description": "The UUID property for the selected provisioning profile."
+ },
+ {
+ "name": "provisioningProfileName",
+ "description": "The Name property for the selected provisioning profile."
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "preinstallprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "execution": {
+ "Node10": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "installprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "postinstallprovprofile.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "provisioningProfileUuid",
+ "provisioningProfileName",
+ "APPLE_PROV_PROFILE_UUID"
+ ]
+ }
+ },
+ "messages": {
+ "InputProvisioningProfileNotFound": "ms-resource:loc.messages.InputProvisioningProfileNotFound",
+ "InstallRequiresMac": "ms-resource:loc.messages.InstallRequiresMac",
+ "InvalidMobileProvisionFileExtension": "ms-resource:loc.messages.InvalidMobileProvisionFileExtension"
+ },
+ "_buildConfigMapping": {
+ "Default": "1.229.3",
+ "Node20-225": "1.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallAppleProvisioningProfileV1_Node20/tsconfig.json b/_generated/InstallAppleProvisioningProfileV1_Node20/tsconfig.json
new file mode 100644
index 000000000000..0438b79f69ac
--- /dev/null
+++ b/_generated/InstallAppleProvisioningProfileV1_Node20/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0.versionmap.txt b/_generated/InstallSSHKeyV0.versionmap.txt
new file mode 100644
index 000000000000..623498f87a5e
--- /dev/null
+++ b/_generated/InstallSSHKeyV0.versionmap.txt
@@ -0,0 +1,2 @@
+Default|0.229.3
+Node20-225|0.229.4
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/de-DE/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..5931426b4cbc
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "SSH-Schlüssel installieren",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Hiermit wird vor einem Build oder einer Bereitstellung ein SSH-Schlüssel installiert.",
+ "loc.instanceNameFormat": "SSH-Schlüssel installieren",
+ "loc.group.displayName.advanced": "Erweitert",
+ "loc.input.label.hostName": "Eintrag in bekannten Hosts",
+ "loc.input.help.hostName": "Der Eintrag für diesen SSH-Schlüssel für die Datei \"known_hosts\". Unterstützt mehrere Hosts.",
+ "loc.input.label.sshPublicKey": "Öffentlicher SSH-Schlüssel",
+ "loc.input.help.sshPublicKey": "Der Inhalt des öffentlichen SSH-Schlüssels. Wenn keine Angabe vorliegt, wird er aus dem privaten Schlüssel generiert.",
+ "loc.input.label.sshPassphrase": "SSH-Passphrase",
+ "loc.input.help.sshPassphrase": "Die Passphrase für den SSH-Schlüssel (sofern vorhanden).",
+ "loc.input.label.sshKeySecureFile": "SSH-Schlüssel",
+ "loc.input.help.sshKeySecureFile": "Wählen Sie den SSH-Schlüssel aus, der in \"Secure Files\" (sichere Dateien) für die Installation auf dem Agent hochgeladen wurde.",
+ "loc.input.label.addEntryToConfig": "Eintrag zur SSH-Konfiguration hinzufügen",
+ "loc.input.help.addEntryToConfig": "Fügen Sie einen Eintrag für den in der SSH-Konfigurationsdatei installierten Schlüssel hinzu. Die Schlüsseldatei steht dann für alle nachfolgenden Aufgaben zur Verfügung.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Name des SSH-Konfigurationseintrags",
+ "loc.input.label.configHostname": "Hostname",
+ "loc.input.help.configHostname": "Hostnamenseigenschaft des SSH-Konfigurationseintrags",
+ "loc.input.label.configUser": "Benutzer",
+ "loc.input.help.configUser": "Benutzernamenseigenschaft des SSH-Konfigurationseintrags",
+ "loc.input.label.configPort": "Port",
+ "loc.input.help.configPort": "Port des SSH-Konfigurationseintrags",
+ "loc.messages.SSHKeyAlreadyInstalled": "Der SSH-Schlüssel ist bereits installiert.",
+ "loc.messages.SSHPublicKeyMalformed": "Der base64-Teil des öffentlichen SSH-Schlüssels konnte nicht abgerufen werden.",
+ "loc.messages.SSHKeyInstallFailed": "Fehler beim Installieren des SSH-Schlüssels.",
+ "loc.messages.CannotResetKnownHosts": "Die Datei \"known_hosts\" kann nicht auf ihre ursprünglichen Werte zurückgesetzt werden.",
+ "loc.messages.GeneratingPublicKey": "Der öffentliche Schlüssel wird aus dem privaten Schlüssel generiert.",
+ "loc.messages.CannotResetFile": "Die Datei \"%s\" kann nicht auf die ursprünglichen Werte zurückgesetzt werden.",
+ "loc.messages.DeletePrivateKeyFile": "Datei mit privatem Schlüssel wird gelöscht.",
+ "loc.messages.InsertingIntoConfig": "Der Eintrag wird in die Konfigurationsdatei eingefügt:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/en-US/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..6d14b59ec320
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Install SSH key",
+ "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Install an SSH key prior to a build or deployment",
+ "loc.instanceNameFormat": "Install an SSH key",
+ "loc.group.displayName.advanced": "Advanced",
+ "loc.input.label.hostName": "Known Hosts Entry",
+ "loc.input.help.hostName": "The entry for this SSH key for the known_hosts file. Supports several hosts.",
+ "loc.input.label.sshPublicKey": "SSH Public Key",
+ "loc.input.help.sshPublicKey": "The contents of the public SSH key. If not specified it will be generated out of private key.",
+ "loc.input.label.sshPassphrase": "SSH Passphrase",
+ "loc.input.help.sshPassphrase": "The passphrase for the SSH key, if any.",
+ "loc.input.label.sshKeySecureFile": "SSH Key",
+ "loc.input.help.sshKeySecureFile": "Select the SSH key that was uploaded to `Secure Files` to install on the agent.",
+ "loc.input.label.addEntryToConfig": "Add entry to SSH config",
+ "loc.input.help.addEntryToConfig": "Add entry related to the key installed to the SSH config file. The key file will be available for all subsequent tasks.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Name of SSH config entry",
+ "loc.input.label.configHostname": "Host name",
+ "loc.input.help.configHostname": "Host name property of SSH config entry",
+ "loc.input.label.configUser": "User",
+ "loc.input.help.configUser": "Username property of SSH config entry",
+ "loc.input.label.configPort": "Port",
+ "loc.input.help.configPort": "Port of SSH config entry",
+ "loc.messages.SSHKeyAlreadyInstalled": "The SSH key is already installed.",
+ "loc.messages.SSHPublicKeyMalformed": "Could not get the base64 portion of the public SSH key.",
+ "loc.messages.SSHKeyInstallFailed": "Failed to install the SSH key.",
+ "loc.messages.CannotResetKnownHosts": "Cannot reset the known_hosts file to its original values.",
+ "loc.messages.GeneratingPublicKey": "Generating public key out of private one.",
+ "loc.messages.CannotResetFile": "Cannot reset the %s file to its original values.",
+ "loc.messages.DeletePrivateKeyFile": "Deleting private key file.",
+ "loc.messages.InsertingIntoConfig": "Inserting entry into config file:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/es-ES/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..e25109f56c8a
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Instalar clave SSH",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Instale una clave SSH antes de crear una compilación o una implementación.",
+ "loc.instanceNameFormat": "Instalar una clave SSH",
+ "loc.group.displayName.advanced": "Avanzado",
+ "loc.input.label.hostName": "Entrada de hosts conocidos",
+ "loc.input.help.hostName": "Entrada de esta clave SSH para el archivo known_hosts. Admite varios hosts.",
+ "loc.input.label.sshPublicKey": "Clave pública SSH",
+ "loc.input.help.sshPublicKey": "Contenido de la clave SSH pública. Si no se especifica, se generará a partir de la clave privada.",
+ "loc.input.label.sshPassphrase": "Frase de contraseña de SSH",
+ "loc.input.help.sshPassphrase": "La frase de contraseña de la clave SSH, si la hay.",
+ "loc.input.label.sshKeySecureFile": "Clave SSH",
+ "loc.input.help.sshKeySecureFile": "Seleccione la clave SSH que se cargó en los archivos seguros para instalarla en el agente.",
+ "loc.input.label.addEntryToConfig": "Agregar una entrada a la configuración de SSH",
+ "loc.input.help.addEntryToConfig": "Agregue una entrada relacionada con la clave instalada en el archivo de configuración de SSH. El archivo de clave estará disponible para todas las tareas subsiguientes.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Nombre de la entrada de configuración de SSH",
+ "loc.input.label.configHostname": "Nombre de host",
+ "loc.input.help.configHostname": "Propiedad de nombre de host de la entrada de configuración de SSH",
+ "loc.input.label.configUser": "Usuario",
+ "loc.input.help.configUser": "Propiedad username de la entrada de configuración de SSH",
+ "loc.input.label.configPort": "Puerto",
+ "loc.input.help.configPort": "Puerto de la entrada de configuración de SSH",
+ "loc.messages.SSHKeyAlreadyInstalled": "La clave SSH está ya instalada.",
+ "loc.messages.SSHPublicKeyMalformed": "No se puede obtener la parte de base64 de la clave SSH pública.",
+ "loc.messages.SSHKeyInstallFailed": "No se pudo instalar la clave SSH.",
+ "loc.messages.CannotResetKnownHosts": "No se pueden restablecer los valores originales del archivo known_hosts.",
+ "loc.messages.GeneratingPublicKey": "Generando la clave pública a partir de una privada.",
+ "loc.messages.CannotResetFile": "No se pueden restablecer los valores originales del archivo %s.",
+ "loc.messages.DeletePrivateKeyFile": "Eliminando el archivo de clave privada.",
+ "loc.messages.InsertingIntoConfig": "Insertando la entrada en el archivo de configuración:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..aedea833a7e2
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Installer la clé SSH",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Installer une clé SSH avant une build ou un déploiement",
+ "loc.instanceNameFormat": "Installer une clé SSH",
+ "loc.group.displayName.advanced": "Avancé",
+ "loc.input.label.hostName": "Entrée des hôtes connus",
+ "loc.input.help.hostName": "Entrée de cette clé SSH pour le fichier known_hosts. Prend en charge plusieurs hôtes.",
+ "loc.input.label.sshPublicKey": "Clé publique SSH",
+ "loc.input.help.sshPublicKey": "Contenu de la clé SSH publique. Si aucune valeur n'est spécifiée, ce contenu est généré à partir de la clé privée.",
+ "loc.input.label.sshPassphrase": "Phrase secrète SSH",
+ "loc.input.help.sshPassphrase": "Phrase secrète de la clé SSH, le cas échéant.",
+ "loc.input.label.sshKeySecureFile": "Clé SSH",
+ "loc.input.help.sshKeySecureFile": "Sélectionnez la clé SSH chargée sur 'Fichiers sécurisés' pour l'installer sur l'agent.",
+ "loc.input.label.addEntryToConfig": "Ajouter une entrée au fichier config SSH",
+ "loc.input.help.addEntryToConfig": "Ajoutez l'entrée relative à la clé installée dans le fichier config SSH. Le fichier de clé sera disponible pour toutes les tâches suivantes.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Nom de l'entrée de configuration SSH",
+ "loc.input.label.configHostname": "Nom d'hôte",
+ "loc.input.help.configHostname": "Propriété de nom d'hôte de l'entrée de configuration SSH",
+ "loc.input.label.configUser": "Utilisateur",
+ "loc.input.help.configUser": "Propriété de nom d'utilisateur de l'entrée de configuration SSH",
+ "loc.input.label.configPort": "Port",
+ "loc.input.help.configPort": "Port de l'entrée de configuration SSH",
+ "loc.messages.SSHKeyAlreadyInstalled": "La clé SSH est déjà installée.",
+ "loc.messages.SSHPublicKeyMalformed": "Impossible d'obtenir la partie base64 de la clé SSH publique.",
+ "loc.messages.SSHKeyInstallFailed": "Échec de l'installation de la clé SSH.",
+ "loc.messages.CannotResetKnownHosts": "Impossible de réinitialiser le fichier known_hosts en fonction de ses valeurs d'origine.",
+ "loc.messages.GeneratingPublicKey": "Génération d'une clé publique à partir d'une clé privée.",
+ "loc.messages.CannotResetFile": "Impossible de réinitialiser le fichier %s en fonction de ses valeurs d'origine.",
+ "loc.messages.DeletePrivateKeyFile": "Suppression du fichier de clé privée.",
+ "loc.messages.InsertingIntoConfig": "Insertion d'une entrée dans le fichier config :"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/it-IT/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..fba7e9e213bf
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Installa chiave SSH",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Installa una chiave SSH prima di una compilazione o una distribuzione",
+ "loc.instanceNameFormat": "Installa una chiave SSH",
+ "loc.group.displayName.advanced": "Avanzate",
+ "loc.input.label.hostName": "Voce known_hosts",
+ "loc.input.help.hostName": "Voce di questa chiave SSH per il file known_hosts. Supporta più host.",
+ "loc.input.label.sshPublicKey": "Chiave pubblica SSH",
+ "loc.input.help.sshPublicKey": "Contenuto della chiave SSH pubblica. Se non è specificato, verrà generato dalla chiave privata.",
+ "loc.input.label.sshPassphrase": "Passphrase SSH",
+ "loc.input.help.sshPassphrase": "Passphrase per la chiave SSH, se presente.",
+ "loc.input.label.sshKeySecureFile": "Chiave SSH",
+ "loc.input.help.sshKeySecureFile": "Consente di selezionare la chiave SSH caricata in `File protetti` da installare nell'agente.",
+ "loc.input.label.addEntryToConfig": "Aggiungi voce alla configurazione SSH",
+ "loc.input.help.addEntryToConfig": "Aggiunge la voce correlata alla chiave installata nel file di configurazione SSH. Il file di chiave sarà disponibile per tutte le attività successive.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Nome della voce di configurazione SSH",
+ "loc.input.label.configHostname": "Nome host",
+ "loc.input.help.configHostname": "Proprietà del nome host della voce di configurazione SSH",
+ "loc.input.label.configUser": "Utente",
+ "loc.input.help.configUser": "Proprietà del nome utente della voce di configurazione SSH",
+ "loc.input.label.configPort": "Porta",
+ "loc.input.help.configPort": "Porta della voce di configurazione SSH",
+ "loc.messages.SSHKeyAlreadyInstalled": "La chiave SSH è già installata.",
+ "loc.messages.SSHPublicKeyMalformed": "Non è stato possibile ottenere la parte base64 della chiave SSH pubblica.",
+ "loc.messages.SSHKeyInstallFailed": "Non è stato possibile installare la chiave SSH.",
+ "loc.messages.CannotResetKnownHosts": "Non è possibile ripristinare i valori originali del file known_hosts.",
+ "loc.messages.GeneratingPublicKey": "Generazione della chiave pubblica da quella privata.",
+ "loc.messages.CannotResetFile": "Non è possibile ripristinare i valori originali del file %s.",
+ "loc.messages.DeletePrivateKeyFile": "Eliminazione del file di chiave privata.",
+ "loc.messages.InsertingIntoConfig": "Inserimento della voce nel file di configurazione:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..18239916492e
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "SSH キーのインストール",
+ "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "ビルドまたは配置の前に、SSH キーをインストールします",
+ "loc.instanceNameFormat": "SSH キーのインストール",
+ "loc.group.displayName.advanced": "詳細設定",
+ "loc.input.label.hostName": "既知のホスト エントリ",
+ "loc.input.help.hostName": "known_hosts ファイルに対するこの SSH キーのエントリ。複数のホストがサポートされています。",
+ "loc.input.label.sshPublicKey": "SSH 公開キー",
+ "loc.input.help.sshPublicKey": "公開 SSH キーの内容。指定しない場合は、秘密キーから生成されます。",
+ "loc.input.label.sshPassphrase": "SSH パスフレーズ",
+ "loc.input.help.sshPassphrase": "SSH キーのパスフレーズ (該当する場合)。",
+ "loc.input.label.sshKeySecureFile": "SSH キー",
+ "loc.input.help.sshKeySecureFile": "エージェントにインストールするために [セキュア ファイル] にアップロードされた SSH キーを選択します。",
+ "loc.input.label.addEntryToConfig": "SSH 構成にエントリを追加する",
+ "loc.input.help.addEntryToConfig": "SSH 構成ファイルにインストールされているキーに関連するエントリを追加します。キー ファイルは、後続のすべてのタスクで使用できるようになります。",
+ "loc.input.label.configHostAlias": "エイリアス",
+ "loc.input.help.configHostAlias": "SSH 構成エントリの名前",
+ "loc.input.label.configHostname": "ホスト名",
+ "loc.input.help.configHostname": "SSH 構成エントリのホスト名プロパティ",
+ "loc.input.label.configUser": "ユーザー",
+ "loc.input.help.configUser": "SSH 構成エントリのユーザー名プロパティ",
+ "loc.input.label.configPort": "ポート",
+ "loc.input.help.configPort": "SSH 構成エントリのポート",
+ "loc.messages.SSHKeyAlreadyInstalled": "SSH キーは既にインストールされています。",
+ "loc.messages.SSHPublicKeyMalformed": "SSH 公開キーの base64 部分を取得できませんでした。",
+ "loc.messages.SSHKeyInstallFailed": "SSH キーをインストールできませんでした。",
+ "loc.messages.CannotResetKnownHosts": "known_hosts ファイルを元の値にリセットできません。",
+ "loc.messages.GeneratingPublicKey": "秘密から公開へキーを生成しています。",
+ "loc.messages.CannotResetFile": "%s ファイルを元の値にリセットできません。",
+ "loc.messages.DeletePrivateKeyFile": "秘密キー ファイルを削除しています。",
+ "loc.messages.InsertingIntoConfig": "構成ファイルにエントリを挿入しています:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..6746da11d1ba
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "SSH 키 설치",
+ "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "빌드 또는 배포 전에 SSH 키를 설치합니다.",
+ "loc.instanceNameFormat": "SSH 키 설치",
+ "loc.group.displayName.advanced": "고급",
+ "loc.input.label.hostName": "알려진 호스트 항목",
+ "loc.input.help.hostName": "known_hosts 파일의 이 SSH 키에 대한 항목입니다. 여러 호스트를 지원합니다.",
+ "loc.input.label.sshPublicKey": "SSH 공개 키",
+ "loc.input.help.sshPublicKey": "퍼블릭 SSH 키의 콘텐츠입니다. 지정하지 않으면 프라이빗 키에서 생성됩니다.",
+ "loc.input.label.sshPassphrase": "SSH 암호",
+ "loc.input.help.sshPassphrase": "SSH 키의 암호(있는 경우)입니다.",
+ "loc.input.label.sshKeySecureFile": "SSH 키",
+ "loc.input.help.sshKeySecureFile": "에이전트에 설치할 '보안 파일'에 업로드된 SSH 키를 선택합니다.",
+ "loc.input.label.addEntryToConfig": "SSH 구성에 항목 추가",
+ "loc.input.help.addEntryToConfig": "SSH 구성 파일에 설치된 키와 관련된 항목을 추가합니다. 모든 후속 작업에 키 파일을 사용할 수 있습니다.",
+ "loc.input.label.configHostAlias": "별칭",
+ "loc.input.help.configHostAlias": "SSH 구성 항목의 이름",
+ "loc.input.label.configHostname": "호스트 이름",
+ "loc.input.help.configHostname": "SSH 구성 항목의 호스트 이름 속성",
+ "loc.input.label.configUser": "사용자",
+ "loc.input.help.configUser": "SSH 구성 항목의 사용자 이름 속성",
+ "loc.input.label.configPort": "포트",
+ "loc.input.help.configPort": "SSH 구성 항목의 포트",
+ "loc.messages.SSHKeyAlreadyInstalled": "SSH 키가 이미 설치되어 있습니다.",
+ "loc.messages.SSHPublicKeyMalformed": "공개 SSH 키의 base64 부분을 가져올 수 없습니다.",
+ "loc.messages.SSHKeyInstallFailed": "SSH 키를 설치하지 못했습니다.",
+ "loc.messages.CannotResetKnownHosts": "known_hosts 파일을 원래 값으로 다시 설정할 수 없습니다.",
+ "loc.messages.GeneratingPublicKey": "프라이빗 키에서 퍼블릭 키를 생성하는 중입니다.",
+ "loc.messages.CannotResetFile": "%s 파일을 원래 값으로 다시 설정할 수 없습니다.",
+ "loc.messages.DeletePrivateKeyFile": "프라이빗 키 파일을 삭제하는 중입니다.",
+ "loc.messages.InsertingIntoConfig": "구성 파일에 항목을 삽입하는 중:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..a78d771f6e1f
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Установить ключ SSH",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Установка ключа SSH до сборки или развертывания",
+ "loc.instanceNameFormat": "Установка ключа SSH",
+ "loc.group.displayName.advanced": "Дополнительно",
+ "loc.input.label.hostName": "Запись известных узлов",
+ "loc.input.help.hostName": "Запись для этого ключа SSH для файла known_hosts. Поддерживается несколько узлов.",
+ "loc.input.label.sshPublicKey": "Открытый ключ SSH",
+ "loc.input.help.sshPublicKey": "Содержимое открытого ключа SSH. Если не указано, оно будет создано на основе закрытого ключа.",
+ "loc.input.label.sshPassphrase": "Парольная фраза SSH",
+ "loc.input.help.sshPassphrase": "Парольная фраза для SSH-ключа при наличии.",
+ "loc.input.label.sshKeySecureFile": "SSH-ключ",
+ "loc.input.help.sshKeySecureFile": "Выберите ключ SSH, отправленный в \"Защитные файлы\", для установки на агент.",
+ "loc.input.label.addEntryToConfig": "Добавить запись в конфигурацию SSH",
+ "loc.input.help.addEntryToConfig": "Добавьте запись, связанную с установленным ключом, в файл конфигурации SSH. Файл ключа будет доступен для всех последующих задач.",
+ "loc.input.label.configHostAlias": "Псевдоним",
+ "loc.input.help.configHostAlias": "Имя записи конфигурации SSH",
+ "loc.input.label.configHostname": "Имя узла",
+ "loc.input.help.configHostname": "Свойство \"Имя узла\" для записи конфигурации SSH",
+ "loc.input.label.configUser": "Пользователь",
+ "loc.input.help.configUser": "Свойство \"Имя пользователя\" для записи конфигурации SSH",
+ "loc.input.label.configPort": "Порт",
+ "loc.input.help.configPort": "Порт записи конфигурации SSH",
+ "loc.messages.SSHKeyAlreadyInstalled": "Ключ SSH уже установлен.",
+ "loc.messages.SSHPublicKeyMalformed": "Не удалось получить часть base64 открытого ключа SSH.",
+ "loc.messages.SSHKeyInstallFailed": "Не удалось установить ключ SSH.",
+ "loc.messages.CannotResetKnownHosts": "Не удается вернуть файл known_hosts к исходным значениям.",
+ "loc.messages.GeneratingPublicKey": "Создание открытого ключа на основе закрытого ключа.",
+ "loc.messages.CannotResetFile": "Не удается сбросить файл %s к исходным значениям.",
+ "loc.messages.DeletePrivateKeyFile": "Удаление файла закрытого ключа.",
+ "loc.messages.InsertingIntoConfig": "Вставка записи в файл конфигурации:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..db4a6b19d2be
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "安装 SSH 密钥",
+ "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "在生成或部署之前安装 SSH 密钥",
+ "loc.instanceNameFormat": "安装 SSH 密钥",
+ "loc.group.displayName.advanced": "高级",
+ "loc.input.label.hostName": "已知主机输入",
+ "loc.input.help.hostName": "用于 known_hosts 文件的此 SSH 密钥的项。支持多个主机。",
+ "loc.input.label.sshPublicKey": "SSH 公钥",
+ "loc.input.help.sshPublicKey": "公共 SSH 密钥的内容。如果未指定,则将基于私钥生成此内容。",
+ "loc.input.label.sshPassphrase": "SSH 密码",
+ "loc.input.help.sshPassphrase": "SSH 密钥的密码(如有)。",
+ "loc.input.label.sshKeySecureFile": "SSH 密钥",
+ "loc.input.help.sshKeySecureFile": "选择已上传到“安全文件”的 SSH 密钥,将其安装到代理上。",
+ "loc.input.label.addEntryToConfig": "向 SSH 配置添加项",
+ "loc.input.help.addEntryToConfig": "添加与安装到 SSH 配置文件的密钥相关的项。密钥文件将可用于所有后续任务。",
+ "loc.input.label.configHostAlias": "别名",
+ "loc.input.help.configHostAlias": "SSH 配置项的名称",
+ "loc.input.label.configHostname": "主机名",
+ "loc.input.help.configHostname": "SSH 配置项的主机名属性",
+ "loc.input.label.configUser": "用户",
+ "loc.input.help.configUser": "SSH 配置项的用户名属性",
+ "loc.input.label.configPort": "端口",
+ "loc.input.help.configPort": "SSH 配置项的端口",
+ "loc.messages.SSHKeyAlreadyInstalled": "已安装 SSH 密钥。",
+ "loc.messages.SSHPublicKeyMalformed": "未能获取公共 SSH 密钥的 base64 部分。",
+ "loc.messages.SSHKeyInstallFailed": "未能安装 SSH 密钥。",
+ "loc.messages.CannotResetKnownHosts": "无法将 known_hosts 文件重置为其初始值。",
+ "loc.messages.GeneratingPublicKey": "正在根据私钥来生成公钥。",
+ "loc.messages.CannotResetFile": "无法将 %s 文件重置为其初始值。",
+ "loc.messages.DeletePrivateKeyFile": "正在删除私钥文件。",
+ "loc.messages.InsertingIntoConfig": "正在向配置文件插入项:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/InstallSSHKeyV0/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..4de30a68c6b3
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "安裝 SSH 金鑰",
+ "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "於建置或部署前安裝 SSH 金鑰",
+ "loc.instanceNameFormat": "安裝 SSH 金鑰",
+ "loc.group.displayName.advanced": "進階",
+ "loc.input.label.hostName": "已知主機輸入",
+ "loc.input.help.hostName": "用於 known_hosts 檔案的此 SSH 金鑰項目。支援數部主機。",
+ "loc.input.label.sshPublicKey": "SSH 公開金鑰",
+ "loc.input.help.sshPublicKey": "公開 SSH 金鑰的內容。若未指定,將會從私密金鑰中產生。",
+ "loc.input.label.sshPassphrase": "SSH 複雜密碼",
+ "loc.input.help.sshPassphrase": "SSH 金鑰的複雜密碼 (如果有的話)。",
+ "loc.input.label.sshKeySecureFile": "SSH 金鑰",
+ "loc.input.help.sshKeySecureFile": "請選取已上傳到 [安全檔案] 的 SSH 金鑰,以安裝在代理程式上。",
+ "loc.input.label.addEntryToConfig": "將項目新增至 SSH 組態",
+ "loc.input.help.addEntryToConfig": "將與所安裝金鑰相關的項目新增至 SSH 組態檔。此金鑰檔將會提供所有後續工作使用。",
+ "loc.input.label.configHostAlias": "別名",
+ "loc.input.help.configHostAlias": "SSH 組態項目的名稱",
+ "loc.input.label.configHostname": "主機名稱",
+ "loc.input.help.configHostname": "SSH 組態項目的主機名稱屬性",
+ "loc.input.label.configUser": "使用者",
+ "loc.input.help.configUser": "SSH 組態項目的使用者名稱屬性",
+ "loc.input.label.configPort": "連接埠",
+ "loc.input.help.configPort": "SSH 組態項目的連接埠",
+ "loc.messages.SSHKeyAlreadyInstalled": "已安裝 SSH 金鑰。",
+ "loc.messages.SSHPublicKeyMalformed": "無法取得公開 SSH 金鑰的 base64 部份。",
+ "loc.messages.SSHKeyInstallFailed": "無法安裝 SSH 金鑰。",
+ "loc.messages.CannotResetKnownHosts": "無法將 known_hosts 檔案重設為其原始值。",
+ "loc.messages.GeneratingPublicKey": "正在從私密金鑰產生公開金鑰。",
+ "loc.messages.CannotResetFile": "無法將 %s 檔案重設回原始值。",
+ "loc.messages.DeletePrivateKeyFile": "正在刪除私密金鑰檔案。",
+ "loc.messages.InsertingIntoConfig": "正在將項目插入組態檔:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Tests/L0.ts b/_generated/InstallSSHKeyV0/Tests/L0.ts
new file mode 100644
index 000000000000..864c230b056c
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/L0.ts
@@ -0,0 +1,98 @@
+import fs = require('fs');
+import assert = require('assert');
+import path = require('path');
+import { MockTestRunner } from 'azure-pipelines-task-lib/mock-test';
+
+describe('InstallSSHKey Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000);
+ before(() => {
+ });
+
+ after(() => {
+ });
+
+ it('Start ssh-agent', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0StartAgent.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert.equal(testRunner.stderr.length, 0, 'should not have written to stderr');
+ assert(testRunner.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Start ssh-agent (no public key specified)', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0StartAgentWithoutPubKey.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert.equal(testRunner.stderr.length, 0, 'should not have written to stderr');
+ assert(testRunner.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('SSH key already installed', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0KeyAlreadyInstalled.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ assert(testRunner.stdOutContained('loc_mock_SSHKeyAlreadyInstalled'), 'expected error: SSH key already installed');
+
+ done();
+ });
+
+ it('SSH key already installed (no public key specified)', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0KeyAlreadyInstalledWithoutPubKey.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ assert(testRunner.stdOutContained('loc_mock_SSHKeyAlreadyInstalled'), 'expected error: SSH key already installed');
+
+ done();
+ });
+
+ it('SSH key malformed', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0KeyMalformed.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ assert(testRunner.stdOutContained('loc_mock_SSHPublicKeyMalformed'), 'expected error: SSH key malformed');
+
+ done();
+ });
+
+ it('SSH key uninstalled from running agent', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ const testPath: string = path.join(__dirname, 'L0RemoveFromAgent.js');
+ const testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.succeeded, 'task should have succeeded');
+ assert(testRunner.stdOutContained('removed from running agent'), 'expected message: removed from running agent');
+ assert(testRunner.ran('/usr/bin/ssh-add -d keyToRemove'),'ssh should have been uninstalled');
+
+ done();
+ });
+});
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Tests/L0KeyAlreadyInstalled.ts b/_generated/InstallSSHKeyV0/Tests/L0KeyAlreadyInstalled.ts
new file mode 100644
index 000000000000..1793d573139a
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/L0KeyAlreadyInstalled.ts
@@ -0,0 +1,76 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = 'ssh-rsa KEYINFORMATIONHERE sample@example.com'
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": sshPublicKey
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0/Tests/L0KeyAlreadyInstalledWithoutPubKey.ts b/_generated/InstallSSHKeyV0/Tests/L0KeyAlreadyInstalledWithoutPubKey.ts
new file mode 100644
index 000000000000..eb6aa27c0bdc
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/L0KeyAlreadyInstalledWithoutPubKey.ts
@@ -0,0 +1,84 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = '';
+let sshPublicKeyGenerated: string = 'ssh-rsa KEYINFORMATIONHERE';
+let sshPublicKeyInstalled: string = 'ssh-rsa KEYINFORMATIONHERE sample@example.com';
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "ssh-keygen": "/usr/bin/ssh-keygen",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/usr/bin/ssh-keygen": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": sshPublicKeyInstalled
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-keygen -y -P -f /build/temp/mySecureFileId.filename" : {
+ "code": 0,
+ "stdout": sshPublicKeyGenerated
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0/Tests/L0KeyMalformed.ts b/_generated/InstallSSHKeyV0/Tests/L0KeyMalformed.ts
new file mode 100644
index 000000000000..eed2d649d294
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/L0KeyMalformed.ts
@@ -0,0 +1,80 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = 'ssh-rsaKEYINFORMATIONHEREsample@example.com'
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": "No keys"
+ },
+ "/usr/bin/ssh-add /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0/Tests/L0RemoveFromAgent.ts b/_generated/InstallSSHKeyV0/Tests/L0RemoveFromAgent.ts
new file mode 100644
index 000000000000..5f54b2ad9cae
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/L0RemoveFromAgent.ts
@@ -0,0 +1,62 @@
+import path = require('path');
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+const postTaskPath = path.join(__dirname, '..', 'postinstallsshkey.js');
+const sshPublicKey: string = 'ssh-rsa KEYINFORMATIONHERE sample@example.com'
+const taskRunner: TaskMockRunner = new TaskMockRunner(postTaskPath);
+
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+process.env['SSH_AGENT_PID'] = '123456';
+process.env['VSTS_TASKVARIABLE_INSTALL_SSH_KEY_DELETE_KEY'] = "keyToRemove";
+
+const secureFileHelperMock = require('./secure-files-mock.js');
+taskRunner.registerMock('securefiles-common/securefiles-common', secureFileHelperMock);
+
+class MockStats {
+ mode = 600;
+};
+const fsAnswers = {
+ writeFileSync: function (filePath, contents) {
+ },
+ existsSync: function (filePath, contents) {
+ return true;
+ },
+ readFileSync: function (filePath) {
+ return 'contents';
+ },
+ statSync: function (filePath) {
+ let s : MockStats = new MockStats();
+ return s;
+ },
+ chmodSync: function (filePath, string) {
+ }
+};
+taskRunner.registerMock('fs', fsAnswers);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add"
+ },
+ "checkPath": {
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true
+ },
+ "exec": {
+ "/usr/bin/ssh-add -d keyToRemove": {
+ "code": 0,
+ "stdout": "removed from running agent"
+ },
+ }
+};
+
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
diff --git a/_generated/InstallSSHKeyV0/Tests/L0StartAgent.ts b/_generated/InstallSSHKeyV0/Tests/L0StartAgent.ts
new file mode 100644
index 000000000000..69604787ca29
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/L0StartAgent.ts
@@ -0,0 +1,80 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = 'ssh-rsa KEYINFORMATIONHERE sample@example.com'
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": "No keys"
+ },
+ "/usr/bin/ssh-add /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0/Tests/L0StartAgentWithoutPubKey.ts b/_generated/InstallSSHKeyV0/Tests/L0StartAgentWithoutPubKey.ts
new file mode 100644
index 000000000000..bf28b6942c25
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/L0StartAgentWithoutPubKey.ts
@@ -0,0 +1,86 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = '';
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "ssh-keygen": "/usr/bin/ssh-keygen",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/usr/bin/ssh-keygen": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": "No keys"
+ },
+ "/usr/bin/ssh-add /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-keygen -y -P -f /build/temp/mySecureFileId.filename" : {
+ "code": 0,
+ "stdout": "ssh-rsa KEYINFORMATIONHERE sample@example.com"
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0/Tests/mocks-registrator.ts b/_generated/InstallSSHKeyV0/Tests/mocks-registrator.ts
new file mode 100644
index 000000000000..4c86292a7940
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/mocks-registrator.ts
@@ -0,0 +1,46 @@
+import os = require('os');
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+export class MocksRegistrator {
+ public static register(taskRunner: TaskMockRunner) {
+ let secureFileHelperMock = require('./secure-files-mock.js');
+ taskRunner.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+ class MockStats {
+ mode = 600;
+ };
+ class MockUser {
+ username = "testUser";
+ };
+
+ taskRunner.registerMock('fs', {
+ writeFileSync: function (filePath, contents) {
+ },
+ existsSync: function (filePath, contents) {
+ return true;
+ },
+ readFileSync: function (filePath) {
+ return 'contents';
+ },
+ statSync: function (filePath) {
+ let s: MockStats = new MockStats();
+ return s;
+ },
+ chmodSync: function (filePath, string) {
+ }
+ });
+
+ taskRunner.registerMock('os', {
+ userInfo: function () {
+ let user: MockUser = new MockUser();
+ return user;
+ },
+ type: function () {
+ return os.type();
+ },
+ homedir: function () {
+ return os.homedir();
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/Tests/package-lock.json b/_generated/InstallSSHKeyV0/Tests/package-lock.json
new file mode 100644
index 000000000000..7137c41478aa
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "vsts-tasks-installsshkey-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz",
+ "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==",
+ "dev": true
+ }
+ }
+}
diff --git a/_generated/InstallSSHKeyV0/Tests/package.json b/_generated/InstallSSHKeyV0/Tests/package.json
new file mode 100644
index 000000000000..0273a49261c0
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "vsts-tasks-installsshkey-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install SSH Key Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.0"
+ }
+}
diff --git a/_generated/InstallSSHKeyV0/Tests/secure-files-mock.ts b/_generated/InstallSSHKeyV0/Tests/secure-files-mock.ts
new file mode 100644
index 000000000000..e821155e5fc8
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/Tests/secure-files-mock.ts
@@ -0,0 +1,19 @@
+import * as tl from "azure-pipelines-task-lib/task";
+
+export class SecureFileHelpers {
+
+ constructor() {
+ tl.debug('Mock SecureFileHelpers constructor');
+ }
+
+ async downloadSecureFile(secureFileId: string) {
+ tl.debug('Mock downloadSecureFile with id = ' + secureFileId);
+ let fileName: string = secureFileId + '.filename';
+ let tempDownloadPath: string = '/build/temp/' + fileName;
+ return tempDownloadPath;
+ }
+
+ deleteSecureFile(secureFileId: string) {
+ tl.debug('Mock deleteSecureFile with id = ' + secureFileId);
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/ThirdPartyNotice.txt b/_generated/InstallSSHKeyV0/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..e71b5c2eac33
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/ThirdPartyNotice.txt
@@ -0,0 +1,459 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (InstallSSHKeyV0) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/mocha (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+3. @types/q (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+4. balanced-match (git://github.com/juliangruber/balanced-match.git)
+5. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+6. concat-map (git://github.com/substack/node-concat-map.git)
+7. minimatch (git://github.com/isaacs/minimatch.git)
+8. mockery (git://github.com/mfncooper/mockery.git)
+9. q (git://github.com/kriskowal/q.git)
+10. semver (git+https://github.com/npm/node-semver.git)
+11. shelljs (git://github.com/arturadib/shelljs.git)
+12. tunnel (git+https://github.com/koichik/node-tunnel.git)
+13. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+14. underscore (git://github.com/jashkenas/underscore.git)
+15. uuid (git+https://github.com/kelektiv/node-uuid.git)
+16. vso-node-api (git+https://github.com/Microsoft/vso-node-api.git)
+17. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git)
+
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/q NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
+%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF vso-node-api NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF vsts-task-lib NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/InstallSSHKeyV0/config-entry.ts b/_generated/InstallSSHKeyV0/config-entry.ts
new file mode 100644
index 000000000000..de50bfafe437
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/config-entry.ts
@@ -0,0 +1,28 @@
+const os = require('os');
+
+/**
+ * Represents SSH configuration file entry.
+ */
+export class ConfigFileEntry {
+ public constructor(
+ private alias:string,
+ private hostName: string,
+ private user: string,
+ private identityFile: string,
+ private port: string) { }
+
+ public toString(): string {
+ let result: string = '';
+ result += `Host ${this.alias}${os.EOL}`;
+ result += `HostName ${this.hostName}${os.EOL}`;
+ result += `IdentityFile "${this.identityFile}"${os.EOL}`;
+
+ if (this.user) {
+ result += `User "${this.user}"${os.EOL}`;
+ }
+ if (this.port) {
+ result += `Port ${this.port}${os.EOL}`;
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/icon.png b/_generated/InstallSSHKeyV0/icon.png
new file mode 100644
index 000000000000..7e9b36a2a91b
Binary files /dev/null and b/_generated/InstallSSHKeyV0/icon.png differ
diff --git a/_generated/InstallSSHKeyV0/icon.svg b/_generated/InstallSSHKeyV0/icon.svg
new file mode 100644
index 000000000000..ee122db2e096
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/icon.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/_generated/InstallSSHKeyV0/installsshkey-util.ts b/_generated/InstallSSHKeyV0/installsshkey-util.ts
new file mode 100644
index 000000000000..41de119239df
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/installsshkey-util.ts
@@ -0,0 +1,339 @@
+import fs = require('fs');
+import os = require('os');
+import Q = require('q');
+import path = require('path');
+import process = require('process');
+import child = require('child_process');
+
+import * as tl from 'azure-pipelines-task-lib/task';
+import * as trm from 'azure-pipelines-task-lib/toolrunner';
+
+import { SecureFileHelpers } from 'azure-pipelines-tasks-securefiles-common';
+import { ConfigFileEntry } from './config-entry';
+
+export const postKillAgentSetting: string = 'INSTALL_SSH_KEY_KILL_SSH_AGENT_PID';
+export const postDeleteKeySetting: string = 'INSTALL_SSH_KEY_DELETE_KEY';
+export const postKnownHostsContentsSetting: string = 'INSTALL_SSH_KEY_KNOWN_HOSTS_CONTENTS';
+export const postKnownHostsLocationSetting: string = 'INSTALL_SSH_KEY_KNOWN_HOSTS_LOCATION';
+export const postKnownHostsDeleteFileSetting: string = 'INSTALL_SSH_KEY_KNOWN_HOSTS_FILE_DELETE';
+export const postConfigContentsSetting: string = 'INSTALL_SSH_KEY_CONFIG_CONTENTS';
+export const postConfigLocationSetting: string = 'INSTALL_SSH_KEY_CONFIG_LOCATION';
+export const postConfigDeleteFileSetting: string = 'INSTALL_SSH_KEY_CONFIG_FILE_DELETE';
+
+export const preservedKeyFileIDVariableKey: string = 'INSTALL_SSH_KEY_PRESERVED_KEY_FILE_ID';
+
+export const sshAgentPidEnvVariableKey: string = 'SSH_AGENT_PID';
+export const sshAgentSockEnvVariableKey: string = 'SSH_AUTH_SOCK';
+
+function execSshAddPassphraseSync(tool, args, passphrase):Q.Promise {
+ tl.debug('execSshAddPassphraseSync');
+
+ var defer = Q.defer();
+ let success = true;
+
+ let cp = child.spawn(tool, args, {
+ detached: true // required to work on macOS
+ });
+
+ var processLineBuffer = (data: Buffer, strBuffer: string, onLine:(line: string) => void): void => {
+ try {
+ var s = strBuffer + data.toString();
+ var n = s.indexOf(os.EOL);
+
+ while(n > -1) {
+ var line = s.substring(0, n);
+ onLine(line);
+
+ // the rest of the string ...
+ s = s.substring(n + os.EOL.length);
+ n = s.indexOf(os.EOL);
+ }
+ strBuffer = s;
+ }
+ catch (err) {
+ tl.debug('error processing line');
+ }
+ }
+
+ var stdbuffer: string = '';
+ cp.stdout.on('data', (data: Buffer) => {
+ process.stdout.write(data);
+ processLineBuffer(data, stdbuffer, (line: string) => {
+ tl.debug('stdline:' + line);
+ });
+ });
+
+ var errbuffer: string = '';
+ cp.stderr.on('data', (data: Buffer) => {
+ // ssh-add puts output on stderr
+ process.stderr.write(data);
+ processLineBuffer(data, errbuffer, (line: string) => {
+ tl.debug('errline:' + line);
+ });
+ });
+
+ cp.on('error', (err) => {
+ defer.reject(new Error(tool + ' failed. ' + err.message));
+ });
+
+ cp.on('close', (code, signal) => {
+ tl.debug('rc:' + code);
+
+ if (stdbuffer.length > 0) {
+ tl.debug('stdline:' + stdbuffer);
+ }
+
+ if (errbuffer.length > 0) {
+ tl.debug('errline:' + errbuffer);
+ }
+
+ // Always ignore the return code
+ tl.debug('success:' + success);
+ if (!success) {
+ defer.reject(new Error(tool + ' failed with return code: ' + code));
+ }
+ else {
+ defer.resolve(success);
+ }
+ });
+ tl.debug('writing passphrase');
+ cp.stdin.write(passphrase);
+ cp.stdin.end();
+ tl.debug('passphrase complete');
+
+ return defer.promise;
+}
+
+export class SshToolRunner {
+ private baseDir = tl.getVariable('Agent.HomeDirectory');
+ private sshGitExternalsDir = path.join('externals', path.join('Git', path.join('usr', path.join('bin'))));
+
+ constructor() {
+ }
+
+ private isWindows(): boolean {
+ return !!os.type().match(/^Win/);
+ }
+
+ private getExecutable(executable: string):string {
+ if (this.isWindows() && this.baseDir) {
+ executable = path.join(this.baseDir, path.join(this.sshGitExternalsDir, executable));
+ executable += '.exe';
+ }
+ return executable;
+ }
+
+ private getWindowsUsername(): string {
+ const username: string = tl.execSync('whoami', []).stdout;
+ return username.trim();
+ }
+
+ private restrictPermissionsToFile(fileLocation: string): void {
+ if (this.isWindows()) {
+ const userName: string = this.getWindowsUsername();
+ tl.execSync('icacls', [fileLocation, '/inheritance:r']);
+ tl.execSync('icacls', [fileLocation, '/grant:r', `${userName}:(F)`]);
+ }
+ fs.chmodSync(fileLocation, '0600');
+ }
+
+ private generatePublicKey(privateKeyLocation: string, passphrase: string) {
+ tl.debug(tl.loc("GeneratingPublicKey"));
+ const options: trm.IExecOptions = {
+ silent: true
+ }
+ let args: string[] = ['-y','-P', passphrase || '', '-f', privateKeyLocation]
+ let keygenResult: trm.IExecSyncResult = tl.execSync('ssh-keygen', args, options);
+ return keygenResult.stdout;
+ }
+
+ public runAgent() {
+ // Expected output sample:
+ // SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK;
+ // SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;
+ let agentResults: trm.IExecSyncResult = tl.execSync(this.getExecutable('ssh-agent'), null);
+
+ let elements: string[] = agentResults.stdout.split(';');
+ for (let i:number = 0; i < elements.length; ++i) {
+ let keyValue : string[] = elements[i].split('=');
+ if (keyValue && keyValue.length >= 2) {
+ let key: string = keyValue[0].trim();
+ let value: string = keyValue[1].trim();
+ tl.debug('Key=' + key + ' value=' + value);
+ if (sshAgentPidEnvVariableKey === key) {
+ tl.setVariable(key, value);
+ tl.setTaskVariable(postKillAgentSetting, value);
+ }
+ else if (sshAgentSockEnvVariableKey === key) {
+ tl.setVariable(key, value);
+ }
+ } else {
+ tl.debug('Skipping ' + elements[i]);
+ }
+ }
+ }
+
+ public async installKey(publicKey: string, privateKeyLocation: string, passphrase: string) {
+ tl.debug('Get a list of the SSH keys in the agent');
+ let results: trm.IExecSyncResult = tl.execSync(this.getExecutable('ssh-add'), '-L');
+
+ // requires user only permissions to add to agent or generate public key
+ let oldMode: number = fs.statSync(privateKeyLocation).mode;
+ this.restrictPermissionsToFile(privateKeyLocation);
+
+ if (!publicKey || publicKey.length === 0) {
+ publicKey = this.generatePublicKey(privateKeyLocation, passphrase);
+ }
+ const publicKeyFile: string = `${privateKeyLocation}.pub`;
+ fs.writeFileSync(publicKeyFile, publicKey);
+
+ let publicKeyComponents: string[] = publicKey.split(' ');
+ if (publicKeyComponents.length <= 1) {
+ throw tl.loc('SSHPublicKeyMalformed');
+ }
+
+ let publicKeyHash: string = publicKeyComponents[1].trim();
+ tl.debug('Checking for public SSH key: ' + publicKeyHash);
+ if (results.stdout.indexOf(publicKeyHash) !== -1) {
+ throw tl.loc('SSHKeyAlreadyInstalled');
+ }
+
+ tl.debug('Adding the SSH key to the agent ' + privateKeyLocation);
+ let installedSSH:boolean = false;
+ if (passphrase) {
+ installedSSH = await execSshAddPassphraseSync(this.getExecutable('ssh-add'), [privateKeyLocation], passphrase);
+ } else {
+ results = tl.execSync(this.getExecutable('ssh-add'), [privateKeyLocation]);
+ installedSSH = !results.error;
+ }
+ if (!installedSSH) {
+ throw tl.loc('SSHKeyInstallFailed');
+ }
+ fs.chmodSync(privateKeyLocation, oldMode);
+ tl.setTaskVariable(postDeleteKeySetting, privateKeyLocation);
+
+ results = tl.execSync(this.getExecutable('ssh-add'), null);
+ }
+
+ public deleteKey(key: string) {
+ let deleteKey: string = tl.getTaskVariable(postDeleteKeySetting);
+ if (deleteKey) {
+ tl.debug('Deleting Key: ' + deleteKey);
+ tl.execSync(this.getExecutable('ssh-add'), ['-d', deleteKey]);
+ }
+ }
+}
+
+export function setKnownHosts(knownHostsEntry: string) {
+ let knownHostsFolder: string = path.join(os.homedir(), '.ssh');
+ let knownHostsFile: string = path.join(knownHostsFolder, 'known_hosts');
+ let knownHostsContent: string = '';
+ let knownHostsDeleteFileOnClose: boolean = true;
+ if (!fs.existsSync(knownHostsFolder)) {
+ fs.mkdirSync(knownHostsFolder);
+ } else if (fs.existsSync(knownHostsFile)) {
+ tl.debug('Read known_hosts');
+ knownHostsDeleteFileOnClose = false;
+ knownHostsContent = fs.readFileSync(knownHostsFile).toString();
+ }
+
+ tl.debug('Inserting entry into known_hosts');
+ const taskAlreadyUsed: boolean = !!tl.getVariable(postKnownHostsLocationSetting);
+ if (taskAlreadyUsed) {
+ fs.appendFileSync(knownHostsFile, `${knownHostsEntry}${os.EOL}`);
+ } else {
+ fs.writeFileSync(knownHostsFile, `${knownHostsEntry}${os.EOL}`);
+ }
+
+ tl.setTaskVariable(postKnownHostsContentsSetting, knownHostsContent);
+ tl.setVariable(postKnownHostsLocationSetting, knownHostsFile);
+ tl.setTaskVariable(postKnownHostsDeleteFileSetting, knownHostsDeleteFileOnClose.toString());
+}
+
+/**
+ * Adds entry to SSH configuration file.
+ * @param {ConfigFileEntry} configEntry
+ */
+export function addConfigEntry(configEntry: ConfigFileEntry): void {
+ const configFolder: string = path.join(os.homedir(), '.ssh');
+ const configFilePath: string = path.join(configFolder, 'config');
+ let configFileContent: string = '';
+ let deleteConfigFileOnClose: boolean = true;
+ if (!fs.existsSync(configFolder)) {
+ fs.mkdirSync(configFolder);
+ } else if (fs.existsSync(configFilePath)) {
+ tl.debug('Reading config file');
+ deleteConfigFileOnClose = false;
+ configFileContent = fs.readFileSync(configFilePath).toString();
+ }
+
+ const configEntryContent: string = configEntry.toString();
+ console.log(tl.loc("InsertingIntoConfig"));
+ console.log(configEntryContent);
+ const configAlreadyChanged: boolean = !!tl.getVariable(postConfigLocationSetting);
+ if (configAlreadyChanged) {
+ fs.appendFileSync(configFilePath, `${os.EOL}${configEntryContent}`);
+ } else {
+ fs.writeFileSync(configFilePath, configEntryContent);
+ }
+
+ tl.setTaskVariable(postConfigContentsSetting, configFileContent);
+ tl.setVariable(postConfigLocationSetting, configFilePath);
+ tl.setTaskVariable(postConfigDeleteFileSetting, deleteConfigFileOnClose.toString());
+}
+
+/**
+ *
+ * @param {string} fileName File name
+ * @param {string} contents File contents which should be restored.
+ * @param {string} location Path to file being restored
+ * @param {boolean} deleteOnExit File should be deleted.
+ */
+function tryRestore(fileName: string, contents: string, location: string, deleteOnExit: boolean): void {
+ if (deleteOnExit && location) {
+ fs.unlinkSync(location);
+ } else if (contents && location) {
+ fs.writeFileSync(location, contents);
+ } else if (location || contents) {
+ tl.warning(tl.loc('CannotResetFile', fileName));
+ tl.debug('(location=' + location + ' content=' + contents + ')');
+ }
+}
+
+/**
+ * Restores known_hosts file to it's initial state.
+ */
+export function tryRestoreKnownHosts() {
+ const knownHostsContents: string = tl.getTaskVariable(postKnownHostsContentsSetting);
+ const knownHostsLocation: string = tl.getVariable(postKnownHostsLocationSetting);
+ const knownHostsDeleteFileOnExit: boolean = tl.getTaskVariable(postKnownHostsDeleteFileSetting) === 'true';
+
+ tl.debug('Restoring known_hosts');
+ tryRestore('known_hosts', knownHostsContents, knownHostsLocation, knownHostsDeleteFileOnExit);
+}
+
+/**
+ * Restores SSH configuration file to it's initial state.
+ */
+export function tryRestoreConfig() {
+ const configContents: string = tl.getTaskVariable(postConfigContentsSetting);
+ const configLocation: string = tl.getVariable(postConfigLocationSetting);
+ const configDeleteFileOnExit: boolean = tl.getTaskVariable(postConfigDeleteFileSetting) === 'true';
+
+ tl.debug('Restoring config');
+ tryRestore('config', configContents, configLocation, configDeleteFileOnExit);
+}
+
+/**
+ * Deletes private key file with ID specified.
+ * @param {string} privateKeyFileID
+ */
+export function tryDeletePrivateKeyFile(privateKeyFileID: string) {
+ if (privateKeyFileID) {
+ tl.debug(tl.loc("DeletePrivateKeyFile"));
+ const secureFileHelpers: SecureFileHelpers = new SecureFileHelpers();
+ secureFileHelpers.deleteSecureFile(privateKeyFileID);
+ } else {
+ tl.debug('No private key file ID was specified.');
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/make.json b/_generated/InstallSSHKeyV0/make.json
new file mode 100644
index 000000000000..54872a7f7368
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/make.json
@@ -0,0 +1,10 @@
+{
+ "rm": [
+ {
+ "items": [
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
+ ],
+ "options": "-Rf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/package-lock.json b/_generated/InstallSSHKeyV0/package-lock.json
new file mode 100644
index 000000000000..e4c8335c0f99
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/package-lock.json
@@ -0,0 +1,548 @@
+{
+ "name": "vsts-tasks-installsshkey",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "16.11.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.60.tgz",
+ "integrity": "sha512-kYIYa1D1L+HDv5M5RXQeEu1o0FKA6yedZIoyugm/MBPROkLpX4L7HRxMrPVyo8bnvjpW/wDlqFNGzXNMb7AdRw=="
+ },
+ "@types/q": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz",
+ "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz",
+ "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz",
+ "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
+ "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/InstallSSHKeyV0/package.json b/_generated/InstallSSHKeyV0/package.json
new file mode 100644
index 000000000000..c7b5d10f5b6c
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installsshkey",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install SSK Key Task",
+ "main": "preinstallsshkey.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^16.11.59",
+ "@types/q": "^1.5.1",
+ "@types/mocha": "^5.2.7",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/_generated/InstallSSHKeyV0/postinstallsshkey.ts b/_generated/InstallSSHKeyV0/postinstallsshkey.ts
new file mode 100644
index 000000000000..371ad3349d9b
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/postinstallsshkey.ts
@@ -0,0 +1,34 @@
+import * as tl from 'azure-pipelines-task-lib/task';
+import ps = require('process');
+import path = require('path');
+import util = require('./installsshkey-util');
+
+async function run() {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+ try {
+ util.tryRestoreKnownHosts();
+ util.tryRestoreConfig();
+
+ let agentPid: string = tl.getTaskVariable(util.postKillAgentSetting);
+ if (agentPid) {
+ tl.debug('Killing SSH Agent PID: ' + agentPid);
+ try {
+ ps.kill(+agentPid);
+ } catch (err) {
+ // This gets cleaned up by the agent anyways, best effort
+ tl.debug(`Killing SSH Agent failed with error: ${err}`);
+ }
+ } else {
+ let deleteKey: string = tl.getTaskVariable(util.postDeleteKeySetting);
+ let sshTool: util.SshToolRunner = new util.SshToolRunner();
+ sshTool.deleteKey(deleteKey)
+ }
+
+ const privateKeyFileID: string = tl.getTaskVariable(util.preservedKeyFileIDVariableKey);
+ util.tryDeletePrivateKeyFile(privateKeyFileID);
+ } catch (err) {
+ tl.setResult(tl.TaskResult.Failed, err);
+ }
+}
+
+run();
diff --git a/_generated/InstallSSHKeyV0/preinstallsshkey.ts b/_generated/InstallSSHKeyV0/preinstallsshkey.ts
new file mode 100644
index 000000000000..214c784f77c8
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/preinstallsshkey.ts
@@ -0,0 +1,61 @@
+import fs = require('fs');
+import os = require('os');
+import path = require('path');
+import secureFilesCommon = require('azure-pipelines-tasks-securefiles-common/securefiles-common');
+import * as tl from 'azure-pipelines-task-lib/task';
+import util = require('./installsshkey-util');
+import { ConfigFileEntry } from "./config-entry"
+
+async function run() {
+
+ let secureFileId: string;
+ let secureFileHelpers: secureFilesCommon.SecureFileHelpers;
+ const addConfigEntry: boolean = tl.getBoolInput('addEntryToConfig', false);
+
+ try {
+ let publicKey: string = tl.getInput('sshPublicKey', false);
+ let knownHostsEntry: string = tl.getInput('hostName', true).trim();
+ let passphrase: string = tl.getInput('sshPassphrase', false);
+ passphrase = !passphrase ? passphrase : passphrase.trim();
+ publicKey = !publicKey ? publicKey : publicKey.trim();
+
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // download ssh key contents
+ secureFileId = tl.getInput('sshKeySecureFile', true);
+ secureFileHelpers = new secureFilesCommon.SecureFileHelpers();
+ let privateKeyLocation: string = await secureFileHelpers.downloadSecureFile(secureFileId);
+
+ let sshTool: util.SshToolRunner = new util.SshToolRunner();
+
+ let pid: string = tl.getVariable(util.sshAgentPidEnvVariableKey);
+ let sock: string = tl.getVariable(util.sshAgentSockEnvVariableKey);
+ tl.debug('PID=' + pid + ' SOCK=' + sock);
+ if (!pid || !sock) {
+ sshTool.runAgent();
+ }
+
+ await sshTool.installKey(publicKey, privateKeyLocation, passphrase);
+ util.setKnownHosts(knownHostsEntry);
+
+ if (addConfigEntry) {
+ const alias: string = tl.getInput('configHostAlias', true);
+ const user: string = tl.getInput('configUser', false);
+ const hostname: string = tl.getInput('configHostname', true);
+ const port: string = tl.getInput('configPort', false);
+ const configEntry: ConfigFileEntry = new ConfigFileEntry(alias, hostname, user, privateKeyLocation, port);
+ util.addConfigEntry(configEntry);
+ tl.setTaskVariable(util.preservedKeyFileIDVariableKey, secureFileId);
+ }
+ } catch(err) {
+ tl.setResult(tl.TaskResult.Failed, err);
+ } finally {
+ // delete SSH key from temp location after installing
+ if (!addConfigEntry && secureFileId && secureFileHelpers) {
+ secureFileHelpers.deleteSecureFile(secureFileId);
+ }
+ }
+ tl.debug('End');
+}
+
+run();
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/task.json b/_generated/InstallSSHKeyV0/task.json
new file mode 100644
index 000000000000..0381cf7d0303
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/task.json
@@ -0,0 +1,166 @@
+{
+ "id": "5c9af2eb-5fc5-42dc-9b91-dc234a8c4400",
+ "name": "InstallSSHKey",
+ "friendlyName": "Install SSH key",
+ "description": "Install an SSH key prior to a build or deployment",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-ssh-key",
+ "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 0,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "Install an SSH key",
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "Advanced",
+ "isExpanded": false
+ }
+ ],
+ "inputs": [
+ {
+ "name": "hostName",
+ "aliases": [
+ "knownHostsEntry"
+ ],
+ "type": "multiLine",
+ "label": "Known Hosts Entry",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "The entry for this SSH key for the known_hosts file. Supports several hosts."
+ },
+ {
+ "name": "sshPublicKey",
+ "type": "string",
+ "label": "SSH Public Key",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "The contents of the public SSH key. If not specified it will be generated out of private key."
+ },
+ {
+ "name": "sshPassphrase",
+ "type": "string",
+ "label": "SSH Passphrase",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "The passphrase for the SSH key, if any."
+ },
+ {
+ "name": "sshKeySecureFile",
+ "type": "secureFile",
+ "label": "SSH Key",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the SSH key that was uploaded to `Secure Files` to install on the agent."
+ },
+ {
+ "name": "addEntryToConfig",
+ "type": "boolean",
+ "label": "Add entry to SSH config",
+ "defaultValue": false,
+ "required": false,
+ "groupName": "advanced",
+ "helpMarkDown": "Add entry related to the key installed to the SSH config file. The key file will be available for all subsequent tasks."
+ },
+ {
+ "name": "configHostAlias",
+ "type": "string",
+ "label": "Alias",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "Name of SSH config entry"
+ },
+ {
+ "name": "configHostname",
+ "type": "string",
+ "label": "Host name",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "Host name property of SSH config entry"
+ },
+ {
+ "name": "configUser",
+ "type": "string",
+ "label": "User",
+ "defaultValue": "",
+ "required": false,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "Username property of SSH config entry"
+ },
+ {
+ "name": "configPort",
+ "type": "string",
+ "label": "Port",
+ "defaultValue": "",
+ "required": false,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "Port of SSH config entry"
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "SSH_AGENT_PID",
+ "SSH_AUTH_SOCK",
+ "INSTALL_SSH_KEY_CONFIG_LOCATION",
+ "INSTALL_SSH_KEY_KNOWN_HOSTS_LOCATION"
+ ]
+ }
+ },
+ "messages": {
+ "SSHKeyAlreadyInstalled": "The SSH key is already installed.",
+ "SSHPublicKeyMalformed": "Could not get the base64 portion of the public SSH key.",
+ "SSHKeyInstallFailed": "Failed to install the SSH key.",
+ "CannotResetKnownHosts": "Cannot reset the known_hosts file to its original values.",
+ "GeneratingPublicKey": "Generating public key out of private one.",
+ "CannotResetFile": "Cannot reset the %s file to its original values.",
+ "DeletePrivateKeyFile": "Deleting private key file.",
+ "InsertingIntoConfig": "Inserting entry into config file:"
+ },
+ "_buildConfigMapping": {
+ "Default": "0.229.3",
+ "Node20-225": "0.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/task.loc.json b/_generated/InstallSSHKeyV0/task.loc.json
new file mode 100644
index 000000000000..110c59d75d0c
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/task.loc.json
@@ -0,0 +1,166 @@
+{
+ "id": "5c9af2eb-5fc5-42dc-9b91-dc234a8c4400",
+ "name": "InstallSSHKey",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-ssh-key",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 0,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "ms-resource:loc.group.displayName.advanced",
+ "isExpanded": false
+ }
+ ],
+ "inputs": [
+ {
+ "name": "hostName",
+ "aliases": [
+ "knownHostsEntry"
+ ],
+ "type": "multiLine",
+ "label": "ms-resource:loc.input.label.hostName",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.hostName"
+ },
+ {
+ "name": "sshPublicKey",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.sshPublicKey",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.sshPublicKey"
+ },
+ {
+ "name": "sshPassphrase",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.sshPassphrase",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.sshPassphrase"
+ },
+ {
+ "name": "sshKeySecureFile",
+ "type": "secureFile",
+ "label": "ms-resource:loc.input.label.sshKeySecureFile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.sshKeySecureFile"
+ },
+ {
+ "name": "addEntryToConfig",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.addEntryToConfig",
+ "defaultValue": false,
+ "required": false,
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.addEntryToConfig"
+ },
+ {
+ "name": "configHostAlias",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.configHostAlias",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.configHostAlias"
+ },
+ {
+ "name": "configHostname",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.configHostname",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.configHostname"
+ },
+ {
+ "name": "configUser",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.configUser",
+ "defaultValue": "",
+ "required": false,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.configUser"
+ },
+ {
+ "name": "configPort",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.configPort",
+ "defaultValue": "",
+ "required": false,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.configPort"
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "SSH_AGENT_PID",
+ "SSH_AUTH_SOCK",
+ "INSTALL_SSH_KEY_CONFIG_LOCATION",
+ "INSTALL_SSH_KEY_KNOWN_HOSTS_LOCATION"
+ ]
+ }
+ },
+ "messages": {
+ "SSHKeyAlreadyInstalled": "ms-resource:loc.messages.SSHKeyAlreadyInstalled",
+ "SSHPublicKeyMalformed": "ms-resource:loc.messages.SSHPublicKeyMalformed",
+ "SSHKeyInstallFailed": "ms-resource:loc.messages.SSHKeyInstallFailed",
+ "CannotResetKnownHosts": "ms-resource:loc.messages.CannotResetKnownHosts",
+ "GeneratingPublicKey": "ms-resource:loc.messages.GeneratingPublicKey",
+ "CannotResetFile": "ms-resource:loc.messages.CannotResetFile",
+ "DeletePrivateKeyFile": "ms-resource:loc.messages.DeletePrivateKeyFile",
+ "InsertingIntoConfig": "ms-resource:loc.messages.InsertingIntoConfig"
+ },
+ "_buildConfigMapping": {
+ "Default": "0.229.3",
+ "Node20-225": "0.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0/tsconfig.json b/_generated/InstallSSHKeyV0/tsconfig.json
new file mode 100644
index 000000000000..0438b79f69ac
--- /dev/null
+++ b/_generated/InstallSSHKeyV0/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/.npmrc b/_generated/InstallSSHKeyV0_Node20/.npmrc
new file mode 100644
index 000000000000..5fca0d518be7
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/.npmrc
@@ -0,0 +1 @@
+scripts-prepend-node-path=true
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..5931426b4cbc
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "SSH-Schlüssel installieren",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Hiermit wird vor einem Build oder einer Bereitstellung ein SSH-Schlüssel installiert.",
+ "loc.instanceNameFormat": "SSH-Schlüssel installieren",
+ "loc.group.displayName.advanced": "Erweitert",
+ "loc.input.label.hostName": "Eintrag in bekannten Hosts",
+ "loc.input.help.hostName": "Der Eintrag für diesen SSH-Schlüssel für die Datei \"known_hosts\". Unterstützt mehrere Hosts.",
+ "loc.input.label.sshPublicKey": "Öffentlicher SSH-Schlüssel",
+ "loc.input.help.sshPublicKey": "Der Inhalt des öffentlichen SSH-Schlüssels. Wenn keine Angabe vorliegt, wird er aus dem privaten Schlüssel generiert.",
+ "loc.input.label.sshPassphrase": "SSH-Passphrase",
+ "loc.input.help.sshPassphrase": "Die Passphrase für den SSH-Schlüssel (sofern vorhanden).",
+ "loc.input.label.sshKeySecureFile": "SSH-Schlüssel",
+ "loc.input.help.sshKeySecureFile": "Wählen Sie den SSH-Schlüssel aus, der in \"Secure Files\" (sichere Dateien) für die Installation auf dem Agent hochgeladen wurde.",
+ "loc.input.label.addEntryToConfig": "Eintrag zur SSH-Konfiguration hinzufügen",
+ "loc.input.help.addEntryToConfig": "Fügen Sie einen Eintrag für den in der SSH-Konfigurationsdatei installierten Schlüssel hinzu. Die Schlüsseldatei steht dann für alle nachfolgenden Aufgaben zur Verfügung.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Name des SSH-Konfigurationseintrags",
+ "loc.input.label.configHostname": "Hostname",
+ "loc.input.help.configHostname": "Hostnamenseigenschaft des SSH-Konfigurationseintrags",
+ "loc.input.label.configUser": "Benutzer",
+ "loc.input.help.configUser": "Benutzernamenseigenschaft des SSH-Konfigurationseintrags",
+ "loc.input.label.configPort": "Port",
+ "loc.input.help.configPort": "Port des SSH-Konfigurationseintrags",
+ "loc.messages.SSHKeyAlreadyInstalled": "Der SSH-Schlüssel ist bereits installiert.",
+ "loc.messages.SSHPublicKeyMalformed": "Der base64-Teil des öffentlichen SSH-Schlüssels konnte nicht abgerufen werden.",
+ "loc.messages.SSHKeyInstallFailed": "Fehler beim Installieren des SSH-Schlüssels.",
+ "loc.messages.CannotResetKnownHosts": "Die Datei \"known_hosts\" kann nicht auf ihre ursprünglichen Werte zurückgesetzt werden.",
+ "loc.messages.GeneratingPublicKey": "Der öffentliche Schlüssel wird aus dem privaten Schlüssel generiert.",
+ "loc.messages.CannotResetFile": "Die Datei \"%s\" kann nicht auf die ursprünglichen Werte zurückgesetzt werden.",
+ "loc.messages.DeletePrivateKeyFile": "Datei mit privatem Schlüssel wird gelöscht.",
+ "loc.messages.InsertingIntoConfig": "Der Eintrag wird in die Konfigurationsdatei eingefügt:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..6d14b59ec320
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Install SSH key",
+ "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Install an SSH key prior to a build or deployment",
+ "loc.instanceNameFormat": "Install an SSH key",
+ "loc.group.displayName.advanced": "Advanced",
+ "loc.input.label.hostName": "Known Hosts Entry",
+ "loc.input.help.hostName": "The entry for this SSH key for the known_hosts file. Supports several hosts.",
+ "loc.input.label.sshPublicKey": "SSH Public Key",
+ "loc.input.help.sshPublicKey": "The contents of the public SSH key. If not specified it will be generated out of private key.",
+ "loc.input.label.sshPassphrase": "SSH Passphrase",
+ "loc.input.help.sshPassphrase": "The passphrase for the SSH key, if any.",
+ "loc.input.label.sshKeySecureFile": "SSH Key",
+ "loc.input.help.sshKeySecureFile": "Select the SSH key that was uploaded to `Secure Files` to install on the agent.",
+ "loc.input.label.addEntryToConfig": "Add entry to SSH config",
+ "loc.input.help.addEntryToConfig": "Add entry related to the key installed to the SSH config file. The key file will be available for all subsequent tasks.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Name of SSH config entry",
+ "loc.input.label.configHostname": "Host name",
+ "loc.input.help.configHostname": "Host name property of SSH config entry",
+ "loc.input.label.configUser": "User",
+ "loc.input.help.configUser": "Username property of SSH config entry",
+ "loc.input.label.configPort": "Port",
+ "loc.input.help.configPort": "Port of SSH config entry",
+ "loc.messages.SSHKeyAlreadyInstalled": "The SSH key is already installed.",
+ "loc.messages.SSHPublicKeyMalformed": "Could not get the base64 portion of the public SSH key.",
+ "loc.messages.SSHKeyInstallFailed": "Failed to install the SSH key.",
+ "loc.messages.CannotResetKnownHosts": "Cannot reset the known_hosts file to its original values.",
+ "loc.messages.GeneratingPublicKey": "Generating public key out of private one.",
+ "loc.messages.CannotResetFile": "Cannot reset the %s file to its original values.",
+ "loc.messages.DeletePrivateKeyFile": "Deleting private key file.",
+ "loc.messages.InsertingIntoConfig": "Inserting entry into config file:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..e25109f56c8a
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Instalar clave SSH",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Instale una clave SSH antes de crear una compilación o una implementación.",
+ "loc.instanceNameFormat": "Instalar una clave SSH",
+ "loc.group.displayName.advanced": "Avanzado",
+ "loc.input.label.hostName": "Entrada de hosts conocidos",
+ "loc.input.help.hostName": "Entrada de esta clave SSH para el archivo known_hosts. Admite varios hosts.",
+ "loc.input.label.sshPublicKey": "Clave pública SSH",
+ "loc.input.help.sshPublicKey": "Contenido de la clave SSH pública. Si no se especifica, se generará a partir de la clave privada.",
+ "loc.input.label.sshPassphrase": "Frase de contraseña de SSH",
+ "loc.input.help.sshPassphrase": "La frase de contraseña de la clave SSH, si la hay.",
+ "loc.input.label.sshKeySecureFile": "Clave SSH",
+ "loc.input.help.sshKeySecureFile": "Seleccione la clave SSH que se cargó en los archivos seguros para instalarla en el agente.",
+ "loc.input.label.addEntryToConfig": "Agregar una entrada a la configuración de SSH",
+ "loc.input.help.addEntryToConfig": "Agregue una entrada relacionada con la clave instalada en el archivo de configuración de SSH. El archivo de clave estará disponible para todas las tareas subsiguientes.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Nombre de la entrada de configuración de SSH",
+ "loc.input.label.configHostname": "Nombre de host",
+ "loc.input.help.configHostname": "Propiedad de nombre de host de la entrada de configuración de SSH",
+ "loc.input.label.configUser": "Usuario",
+ "loc.input.help.configUser": "Propiedad username de la entrada de configuración de SSH",
+ "loc.input.label.configPort": "Puerto",
+ "loc.input.help.configPort": "Puerto de la entrada de configuración de SSH",
+ "loc.messages.SSHKeyAlreadyInstalled": "La clave SSH está ya instalada.",
+ "loc.messages.SSHPublicKeyMalformed": "No se puede obtener la parte de base64 de la clave SSH pública.",
+ "loc.messages.SSHKeyInstallFailed": "No se pudo instalar la clave SSH.",
+ "loc.messages.CannotResetKnownHosts": "No se pueden restablecer los valores originales del archivo known_hosts.",
+ "loc.messages.GeneratingPublicKey": "Generando la clave pública a partir de una privada.",
+ "loc.messages.CannotResetFile": "No se pueden restablecer los valores originales del archivo %s.",
+ "loc.messages.DeletePrivateKeyFile": "Eliminando el archivo de clave privada.",
+ "loc.messages.InsertingIntoConfig": "Insertando la entrada en el archivo de configuración:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..aedea833a7e2
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Installer la clé SSH",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Installer une clé SSH avant une build ou un déploiement",
+ "loc.instanceNameFormat": "Installer une clé SSH",
+ "loc.group.displayName.advanced": "Avancé",
+ "loc.input.label.hostName": "Entrée des hôtes connus",
+ "loc.input.help.hostName": "Entrée de cette clé SSH pour le fichier known_hosts. Prend en charge plusieurs hôtes.",
+ "loc.input.label.sshPublicKey": "Clé publique SSH",
+ "loc.input.help.sshPublicKey": "Contenu de la clé SSH publique. Si aucune valeur n'est spécifiée, ce contenu est généré à partir de la clé privée.",
+ "loc.input.label.sshPassphrase": "Phrase secrète SSH",
+ "loc.input.help.sshPassphrase": "Phrase secrète de la clé SSH, le cas échéant.",
+ "loc.input.label.sshKeySecureFile": "Clé SSH",
+ "loc.input.help.sshKeySecureFile": "Sélectionnez la clé SSH chargée sur 'Fichiers sécurisés' pour l'installer sur l'agent.",
+ "loc.input.label.addEntryToConfig": "Ajouter une entrée au fichier config SSH",
+ "loc.input.help.addEntryToConfig": "Ajoutez l'entrée relative à la clé installée dans le fichier config SSH. Le fichier de clé sera disponible pour toutes les tâches suivantes.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Nom de l'entrée de configuration SSH",
+ "loc.input.label.configHostname": "Nom d'hôte",
+ "loc.input.help.configHostname": "Propriété de nom d'hôte de l'entrée de configuration SSH",
+ "loc.input.label.configUser": "Utilisateur",
+ "loc.input.help.configUser": "Propriété de nom d'utilisateur de l'entrée de configuration SSH",
+ "loc.input.label.configPort": "Port",
+ "loc.input.help.configPort": "Port de l'entrée de configuration SSH",
+ "loc.messages.SSHKeyAlreadyInstalled": "La clé SSH est déjà installée.",
+ "loc.messages.SSHPublicKeyMalformed": "Impossible d'obtenir la partie base64 de la clé SSH publique.",
+ "loc.messages.SSHKeyInstallFailed": "Échec de l'installation de la clé SSH.",
+ "loc.messages.CannotResetKnownHosts": "Impossible de réinitialiser le fichier known_hosts en fonction de ses valeurs d'origine.",
+ "loc.messages.GeneratingPublicKey": "Génération d'une clé publique à partir d'une clé privée.",
+ "loc.messages.CannotResetFile": "Impossible de réinitialiser le fichier %s en fonction de ses valeurs d'origine.",
+ "loc.messages.DeletePrivateKeyFile": "Suppression du fichier de clé privée.",
+ "loc.messages.InsertingIntoConfig": "Insertion d'une entrée dans le fichier config :"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..fba7e9e213bf
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Installa chiave SSH",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Installa una chiave SSH prima di una compilazione o una distribuzione",
+ "loc.instanceNameFormat": "Installa una chiave SSH",
+ "loc.group.displayName.advanced": "Avanzate",
+ "loc.input.label.hostName": "Voce known_hosts",
+ "loc.input.help.hostName": "Voce di questa chiave SSH per il file known_hosts. Supporta più host.",
+ "loc.input.label.sshPublicKey": "Chiave pubblica SSH",
+ "loc.input.help.sshPublicKey": "Contenuto della chiave SSH pubblica. Se non è specificato, verrà generato dalla chiave privata.",
+ "loc.input.label.sshPassphrase": "Passphrase SSH",
+ "loc.input.help.sshPassphrase": "Passphrase per la chiave SSH, se presente.",
+ "loc.input.label.sshKeySecureFile": "Chiave SSH",
+ "loc.input.help.sshKeySecureFile": "Consente di selezionare la chiave SSH caricata in `File protetti` da installare nell'agente.",
+ "loc.input.label.addEntryToConfig": "Aggiungi voce alla configurazione SSH",
+ "loc.input.help.addEntryToConfig": "Aggiunge la voce correlata alla chiave installata nel file di configurazione SSH. Il file di chiave sarà disponibile per tutte le attività successive.",
+ "loc.input.label.configHostAlias": "Alias",
+ "loc.input.help.configHostAlias": "Nome della voce di configurazione SSH",
+ "loc.input.label.configHostname": "Nome host",
+ "loc.input.help.configHostname": "Proprietà del nome host della voce di configurazione SSH",
+ "loc.input.label.configUser": "Utente",
+ "loc.input.help.configUser": "Proprietà del nome utente della voce di configurazione SSH",
+ "loc.input.label.configPort": "Porta",
+ "loc.input.help.configPort": "Porta della voce di configurazione SSH",
+ "loc.messages.SSHKeyAlreadyInstalled": "La chiave SSH è già installata.",
+ "loc.messages.SSHPublicKeyMalformed": "Non è stato possibile ottenere la parte base64 della chiave SSH pubblica.",
+ "loc.messages.SSHKeyInstallFailed": "Non è stato possibile installare la chiave SSH.",
+ "loc.messages.CannotResetKnownHosts": "Non è possibile ripristinare i valori originali del file known_hosts.",
+ "loc.messages.GeneratingPublicKey": "Generazione della chiave pubblica da quella privata.",
+ "loc.messages.CannotResetFile": "Non è possibile ripristinare i valori originali del file %s.",
+ "loc.messages.DeletePrivateKeyFile": "Eliminazione del file di chiave privata.",
+ "loc.messages.InsertingIntoConfig": "Inserimento della voce nel file di configurazione:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..18239916492e
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "SSH キーのインストール",
+ "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "ビルドまたは配置の前に、SSH キーをインストールします",
+ "loc.instanceNameFormat": "SSH キーのインストール",
+ "loc.group.displayName.advanced": "詳細設定",
+ "loc.input.label.hostName": "既知のホスト エントリ",
+ "loc.input.help.hostName": "known_hosts ファイルに対するこの SSH キーのエントリ。複数のホストがサポートされています。",
+ "loc.input.label.sshPublicKey": "SSH 公開キー",
+ "loc.input.help.sshPublicKey": "公開 SSH キーの内容。指定しない場合は、秘密キーから生成されます。",
+ "loc.input.label.sshPassphrase": "SSH パスフレーズ",
+ "loc.input.help.sshPassphrase": "SSH キーのパスフレーズ (該当する場合)。",
+ "loc.input.label.sshKeySecureFile": "SSH キー",
+ "loc.input.help.sshKeySecureFile": "エージェントにインストールするために [セキュア ファイル] にアップロードされた SSH キーを選択します。",
+ "loc.input.label.addEntryToConfig": "SSH 構成にエントリを追加する",
+ "loc.input.help.addEntryToConfig": "SSH 構成ファイルにインストールされているキーに関連するエントリを追加します。キー ファイルは、後続のすべてのタスクで使用できるようになります。",
+ "loc.input.label.configHostAlias": "エイリアス",
+ "loc.input.help.configHostAlias": "SSH 構成エントリの名前",
+ "loc.input.label.configHostname": "ホスト名",
+ "loc.input.help.configHostname": "SSH 構成エントリのホスト名プロパティ",
+ "loc.input.label.configUser": "ユーザー",
+ "loc.input.help.configUser": "SSH 構成エントリのユーザー名プロパティ",
+ "loc.input.label.configPort": "ポート",
+ "loc.input.help.configPort": "SSH 構成エントリのポート",
+ "loc.messages.SSHKeyAlreadyInstalled": "SSH キーは既にインストールされています。",
+ "loc.messages.SSHPublicKeyMalformed": "SSH 公開キーの base64 部分を取得できませんでした。",
+ "loc.messages.SSHKeyInstallFailed": "SSH キーをインストールできませんでした。",
+ "loc.messages.CannotResetKnownHosts": "known_hosts ファイルを元の値にリセットできません。",
+ "loc.messages.GeneratingPublicKey": "秘密から公開へキーを生成しています。",
+ "loc.messages.CannotResetFile": "%s ファイルを元の値にリセットできません。",
+ "loc.messages.DeletePrivateKeyFile": "秘密キー ファイルを削除しています。",
+ "loc.messages.InsertingIntoConfig": "構成ファイルにエントリを挿入しています:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..6746da11d1ba
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "SSH 키 설치",
+ "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "빌드 또는 배포 전에 SSH 키를 설치합니다.",
+ "loc.instanceNameFormat": "SSH 키 설치",
+ "loc.group.displayName.advanced": "고급",
+ "loc.input.label.hostName": "알려진 호스트 항목",
+ "loc.input.help.hostName": "known_hosts 파일의 이 SSH 키에 대한 항목입니다. 여러 호스트를 지원합니다.",
+ "loc.input.label.sshPublicKey": "SSH 공개 키",
+ "loc.input.help.sshPublicKey": "퍼블릭 SSH 키의 콘텐츠입니다. 지정하지 않으면 프라이빗 키에서 생성됩니다.",
+ "loc.input.label.sshPassphrase": "SSH 암호",
+ "loc.input.help.sshPassphrase": "SSH 키의 암호(있는 경우)입니다.",
+ "loc.input.label.sshKeySecureFile": "SSH 키",
+ "loc.input.help.sshKeySecureFile": "에이전트에 설치할 '보안 파일'에 업로드된 SSH 키를 선택합니다.",
+ "loc.input.label.addEntryToConfig": "SSH 구성에 항목 추가",
+ "loc.input.help.addEntryToConfig": "SSH 구성 파일에 설치된 키와 관련된 항목을 추가합니다. 모든 후속 작업에 키 파일을 사용할 수 있습니다.",
+ "loc.input.label.configHostAlias": "별칭",
+ "loc.input.help.configHostAlias": "SSH 구성 항목의 이름",
+ "loc.input.label.configHostname": "호스트 이름",
+ "loc.input.help.configHostname": "SSH 구성 항목의 호스트 이름 속성",
+ "loc.input.label.configUser": "사용자",
+ "loc.input.help.configUser": "SSH 구성 항목의 사용자 이름 속성",
+ "loc.input.label.configPort": "포트",
+ "loc.input.help.configPort": "SSH 구성 항목의 포트",
+ "loc.messages.SSHKeyAlreadyInstalled": "SSH 키가 이미 설치되어 있습니다.",
+ "loc.messages.SSHPublicKeyMalformed": "공개 SSH 키의 base64 부분을 가져올 수 없습니다.",
+ "loc.messages.SSHKeyInstallFailed": "SSH 키를 설치하지 못했습니다.",
+ "loc.messages.CannotResetKnownHosts": "known_hosts 파일을 원래 값으로 다시 설정할 수 없습니다.",
+ "loc.messages.GeneratingPublicKey": "프라이빗 키에서 퍼블릭 키를 생성하는 중입니다.",
+ "loc.messages.CannotResetFile": "%s 파일을 원래 값으로 다시 설정할 수 없습니다.",
+ "loc.messages.DeletePrivateKeyFile": "프라이빗 키 파일을 삭제하는 중입니다.",
+ "loc.messages.InsertingIntoConfig": "구성 파일에 항목을 삽입하는 중:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..a78d771f6e1f
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "Установить ключ SSH",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "Установка ключа SSH до сборки или развертывания",
+ "loc.instanceNameFormat": "Установка ключа SSH",
+ "loc.group.displayName.advanced": "Дополнительно",
+ "loc.input.label.hostName": "Запись известных узлов",
+ "loc.input.help.hostName": "Запись для этого ключа SSH для файла known_hosts. Поддерживается несколько узлов.",
+ "loc.input.label.sshPublicKey": "Открытый ключ SSH",
+ "loc.input.help.sshPublicKey": "Содержимое открытого ключа SSH. Если не указано, оно будет создано на основе закрытого ключа.",
+ "loc.input.label.sshPassphrase": "Парольная фраза SSH",
+ "loc.input.help.sshPassphrase": "Парольная фраза для SSH-ключа при наличии.",
+ "loc.input.label.sshKeySecureFile": "SSH-ключ",
+ "loc.input.help.sshKeySecureFile": "Выберите ключ SSH, отправленный в \"Защитные файлы\", для установки на агент.",
+ "loc.input.label.addEntryToConfig": "Добавить запись в конфигурацию SSH",
+ "loc.input.help.addEntryToConfig": "Добавьте запись, связанную с установленным ключом, в файл конфигурации SSH. Файл ключа будет доступен для всех последующих задач.",
+ "loc.input.label.configHostAlias": "Псевдоним",
+ "loc.input.help.configHostAlias": "Имя записи конфигурации SSH",
+ "loc.input.label.configHostname": "Имя узла",
+ "loc.input.help.configHostname": "Свойство \"Имя узла\" для записи конфигурации SSH",
+ "loc.input.label.configUser": "Пользователь",
+ "loc.input.help.configUser": "Свойство \"Имя пользователя\" для записи конфигурации SSH",
+ "loc.input.label.configPort": "Порт",
+ "loc.input.help.configPort": "Порт записи конфигурации SSH",
+ "loc.messages.SSHKeyAlreadyInstalled": "Ключ SSH уже установлен.",
+ "loc.messages.SSHPublicKeyMalformed": "Не удалось получить часть base64 открытого ключа SSH.",
+ "loc.messages.SSHKeyInstallFailed": "Не удалось установить ключ SSH.",
+ "loc.messages.CannotResetKnownHosts": "Не удается вернуть файл known_hosts к исходным значениям.",
+ "loc.messages.GeneratingPublicKey": "Создание открытого ключа на основе закрытого ключа.",
+ "loc.messages.CannotResetFile": "Не удается сбросить файл %s к исходным значениям.",
+ "loc.messages.DeletePrivateKeyFile": "Удаление файла закрытого ключа.",
+ "loc.messages.InsertingIntoConfig": "Вставка записи в файл конфигурации:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..db4a6b19d2be
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "安装 SSH 密钥",
+ "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "在生成或部署之前安装 SSH 密钥",
+ "loc.instanceNameFormat": "安装 SSH 密钥",
+ "loc.group.displayName.advanced": "高级",
+ "loc.input.label.hostName": "已知主机输入",
+ "loc.input.help.hostName": "用于 known_hosts 文件的此 SSH 密钥的项。支持多个主机。",
+ "loc.input.label.sshPublicKey": "SSH 公钥",
+ "loc.input.help.sshPublicKey": "公共 SSH 密钥的内容。如果未指定,则将基于私钥生成此内容。",
+ "loc.input.label.sshPassphrase": "SSH 密码",
+ "loc.input.help.sshPassphrase": "SSH 密钥的密码(如有)。",
+ "loc.input.label.sshKeySecureFile": "SSH 密钥",
+ "loc.input.help.sshKeySecureFile": "选择已上传到“安全文件”的 SSH 密钥,将其安装到代理上。",
+ "loc.input.label.addEntryToConfig": "向 SSH 配置添加项",
+ "loc.input.help.addEntryToConfig": "添加与安装到 SSH 配置文件的密钥相关的项。密钥文件将可用于所有后续任务。",
+ "loc.input.label.configHostAlias": "别名",
+ "loc.input.help.configHostAlias": "SSH 配置项的名称",
+ "loc.input.label.configHostname": "主机名",
+ "loc.input.help.configHostname": "SSH 配置项的主机名属性",
+ "loc.input.label.configUser": "用户",
+ "loc.input.help.configUser": "SSH 配置项的用户名属性",
+ "loc.input.label.configPort": "端口",
+ "loc.input.help.configPort": "SSH 配置项的端口",
+ "loc.messages.SSHKeyAlreadyInstalled": "已安装 SSH 密钥。",
+ "loc.messages.SSHPublicKeyMalformed": "未能获取公共 SSH 密钥的 base64 部分。",
+ "loc.messages.SSHKeyInstallFailed": "未能安装 SSH 密钥。",
+ "loc.messages.CannotResetKnownHosts": "无法将 known_hosts 文件重置为其初始值。",
+ "loc.messages.GeneratingPublicKey": "正在根据私钥来生成公钥。",
+ "loc.messages.CannotResetFile": "无法将 %s 文件重置为其初始值。",
+ "loc.messages.DeletePrivateKeyFile": "正在删除私钥文件。",
+ "loc.messages.InsertingIntoConfig": "正在向配置文件插入项:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..4de30a68c6b3
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,33 @@
+{
+ "loc.friendlyName": "安裝 SSH 金鑰",
+ "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "loc.description": "於建置或部署前安裝 SSH 金鑰",
+ "loc.instanceNameFormat": "安裝 SSH 金鑰",
+ "loc.group.displayName.advanced": "進階",
+ "loc.input.label.hostName": "已知主機輸入",
+ "loc.input.help.hostName": "用於 known_hosts 檔案的此 SSH 金鑰項目。支援數部主機。",
+ "loc.input.label.sshPublicKey": "SSH 公開金鑰",
+ "loc.input.help.sshPublicKey": "公開 SSH 金鑰的內容。若未指定,將會從私密金鑰中產生。",
+ "loc.input.label.sshPassphrase": "SSH 複雜密碼",
+ "loc.input.help.sshPassphrase": "SSH 金鑰的複雜密碼 (如果有的話)。",
+ "loc.input.label.sshKeySecureFile": "SSH 金鑰",
+ "loc.input.help.sshKeySecureFile": "請選取已上傳到 [安全檔案] 的 SSH 金鑰,以安裝在代理程式上。",
+ "loc.input.label.addEntryToConfig": "將項目新增至 SSH 組態",
+ "loc.input.help.addEntryToConfig": "將與所安裝金鑰相關的項目新增至 SSH 組態檔。此金鑰檔將會提供所有後續工作使用。",
+ "loc.input.label.configHostAlias": "別名",
+ "loc.input.help.configHostAlias": "SSH 組態項目的名稱",
+ "loc.input.label.configHostname": "主機名稱",
+ "loc.input.help.configHostname": "SSH 組態項目的主機名稱屬性",
+ "loc.input.label.configUser": "使用者",
+ "loc.input.help.configUser": "SSH 組態項目的使用者名稱屬性",
+ "loc.input.label.configPort": "連接埠",
+ "loc.input.help.configPort": "SSH 組態項目的連接埠",
+ "loc.messages.SSHKeyAlreadyInstalled": "已安裝 SSH 金鑰。",
+ "loc.messages.SSHPublicKeyMalformed": "無法取得公開 SSH 金鑰的 base64 部份。",
+ "loc.messages.SSHKeyInstallFailed": "無法安裝 SSH 金鑰。",
+ "loc.messages.CannotResetKnownHosts": "無法將 known_hosts 檔案重設為其原始值。",
+ "loc.messages.GeneratingPublicKey": "正在從私密金鑰產生公開金鑰。",
+ "loc.messages.CannotResetFile": "無法將 %s 檔案重設回原始值。",
+ "loc.messages.DeletePrivateKeyFile": "正在刪除私密金鑰檔案。",
+ "loc.messages.InsertingIntoConfig": "正在將項目插入組態檔:"
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/L0.ts b/_generated/InstallSSHKeyV0_Node20/Tests/L0.ts
new file mode 100644
index 000000000000..864c230b056c
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/L0.ts
@@ -0,0 +1,98 @@
+import fs = require('fs');
+import assert = require('assert');
+import path = require('path');
+import { MockTestRunner } from 'azure-pipelines-task-lib/mock-test';
+
+describe('InstallSSHKey Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000);
+ before(() => {
+ });
+
+ after(() => {
+ });
+
+ it('Start ssh-agent', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0StartAgent.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert.equal(testRunner.stderr.length, 0, 'should not have written to stderr');
+ assert(testRunner.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('Start ssh-agent (no public key specified)', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0StartAgentWithoutPubKey.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert.equal(testRunner.stderr.length, 0, 'should not have written to stderr');
+ assert(testRunner.succeeded, 'task should have succeeded');
+
+ done();
+ });
+
+ it('SSH key already installed', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0KeyAlreadyInstalled.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ assert(testRunner.stdOutContained('loc_mock_SSHKeyAlreadyInstalled'), 'expected error: SSH key already installed');
+
+ done();
+ });
+
+ it('SSH key already installed (no public key specified)', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0KeyAlreadyInstalledWithoutPubKey.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ assert(testRunner.stdOutContained('loc_mock_SSHKeyAlreadyInstalled'), 'expected error: SSH key already installed');
+
+ done();
+ });
+
+ it('SSH key malformed', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ let testPath: string = path.join(__dirname, 'L0KeyMalformed.js');
+ let testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ assert(testRunner.stdOutContained('loc_mock_SSHPublicKeyMalformed'), 'expected error: SSH key malformed');
+
+ done();
+ });
+
+ it('SSH key uninstalled from running agent', (done: Mocha.Done) => {
+ this.timeout(1000);
+
+ const testPath: string = path.join(__dirname, 'L0RemoveFromAgent.js');
+ const testRunner: MockTestRunner = new MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.succeeded, 'task should have succeeded');
+ assert(testRunner.stdOutContained('removed from running agent'), 'expected message: removed from running agent');
+ assert(testRunner.ran('/usr/bin/ssh-add -d keyToRemove'),'ssh should have been uninstalled');
+
+ done();
+ });
+});
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyAlreadyInstalled.ts b/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyAlreadyInstalled.ts
new file mode 100644
index 000000000000..1793d573139a
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyAlreadyInstalled.ts
@@ -0,0 +1,76 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = 'ssh-rsa KEYINFORMATIONHERE sample@example.com'
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": sshPublicKey
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyAlreadyInstalledWithoutPubKey.ts b/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyAlreadyInstalledWithoutPubKey.ts
new file mode 100644
index 000000000000..eb6aa27c0bdc
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyAlreadyInstalledWithoutPubKey.ts
@@ -0,0 +1,84 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = '';
+let sshPublicKeyGenerated: string = 'ssh-rsa KEYINFORMATIONHERE';
+let sshPublicKeyInstalled: string = 'ssh-rsa KEYINFORMATIONHERE sample@example.com';
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "ssh-keygen": "/usr/bin/ssh-keygen",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/usr/bin/ssh-keygen": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": sshPublicKeyInstalled
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-keygen -y -P -f /build/temp/mySecureFileId.filename" : {
+ "code": 0,
+ "stdout": sshPublicKeyGenerated
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyMalformed.ts b/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyMalformed.ts
new file mode 100644
index 000000000000..eed2d649d294
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/L0KeyMalformed.ts
@@ -0,0 +1,80 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = 'ssh-rsaKEYINFORMATIONHEREsample@example.com'
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": "No keys"
+ },
+ "/usr/bin/ssh-add /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/L0RemoveFromAgent.ts b/_generated/InstallSSHKeyV0_Node20/Tests/L0RemoveFromAgent.ts
new file mode 100644
index 000000000000..5f54b2ad9cae
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/L0RemoveFromAgent.ts
@@ -0,0 +1,62 @@
+import path = require('path');
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+const postTaskPath = path.join(__dirname, '..', 'postinstallsshkey.js');
+const sshPublicKey: string = 'ssh-rsa KEYINFORMATIONHERE sample@example.com'
+const taskRunner: TaskMockRunner = new TaskMockRunner(postTaskPath);
+
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+process.env['SSH_AGENT_PID'] = '123456';
+process.env['VSTS_TASKVARIABLE_INSTALL_SSH_KEY_DELETE_KEY'] = "keyToRemove";
+
+const secureFileHelperMock = require('./secure-files-mock.js');
+taskRunner.registerMock('securefiles-common/securefiles-common', secureFileHelperMock);
+
+class MockStats {
+ mode = 600;
+};
+const fsAnswers = {
+ writeFileSync: function (filePath, contents) {
+ },
+ existsSync: function (filePath, contents) {
+ return true;
+ },
+ readFileSync: function (filePath) {
+ return 'contents';
+ },
+ statSync: function (filePath) {
+ let s : MockStats = new MockStats();
+ return s;
+ },
+ chmodSync: function (filePath, string) {
+ }
+};
+taskRunner.registerMock('fs', fsAnswers);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add"
+ },
+ "checkPath": {
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true
+ },
+ "exec": {
+ "/usr/bin/ssh-add -d keyToRemove": {
+ "code": 0,
+ "stdout": "removed from running agent"
+ },
+ }
+};
+
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/L0StartAgent.ts b/_generated/InstallSSHKeyV0_Node20/Tests/L0StartAgent.ts
new file mode 100644
index 000000000000..69604787ca29
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/L0StartAgent.ts
@@ -0,0 +1,80 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = 'ssh-rsa KEYINFORMATIONHERE sample@example.com'
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": "No keys"
+ },
+ "/usr/bin/ssh-add /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/L0StartAgentWithoutPubKey.ts b/_generated/InstallSSHKeyV0_Node20/Tests/L0StartAgentWithoutPubKey.ts
new file mode 100644
index 000000000000..bf28b6942c25
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/L0StartAgentWithoutPubKey.ts
@@ -0,0 +1,86 @@
+import path = require('path');
+import { MocksRegistrator } from './mocks-registrator';
+import { TaskLibAnswers } from 'azure-pipelines-task-lib/mock-answer';
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+let taskPath = path.join(__dirname, '..', 'preinstallsshkey.js');
+let taskRunner: TaskMockRunner = new TaskMockRunner(taskPath);
+
+let sshPublicKey: string = '';
+taskRunner.setInput('sshKeySecureFile', 'mySecureFileId');
+taskRunner.setInput('sshPublicKey', sshPublicKey);
+taskRunner.setInput('hostName', 'host name entry');
+
+process.env['AGENT_VERSION'] = '2.117.0';
+process.env['AGENT_HOMEDIRECTORY'] = '';
+
+MocksRegistrator.register(taskRunner);
+
+// provide answers for task mock
+let answers: TaskLibAnswers = {
+ "which": {
+ "security": "/usr/bin/security",
+ "ssh-agent": "/usr/bin/ssh-agent",
+ "ssh-add": "/usr/bin/ssh-add",
+ "rm": "/bin/rm",
+ "cp": "/bin/cp",
+ "icacls": "/bin/icacls",
+ "ssh-keygen": "/usr/bin/ssh-keygen",
+ "whoami": "/bin/whoami"
+ },
+ "checkPath": {
+ "/usr/bin/security": true,
+ "/usr/bin/ssh-agent": true,
+ "/usr/bin/ssh-add": true,
+ "/bin/rm": true,
+ "/bin/cp": true,
+ "/bin/icacls": true,
+ "/usr/bin/ssh-keygen": true,
+ "/bin/whoami": true
+ },
+ "exist": {
+ "/build/temp/mySecureFileId.filename": true
+ },
+ "exec": {
+ "/usr/bin/security cms -D -i /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": "ssh key details here"
+ },
+ "/usr/bin/ssh-agent": {
+ "code": 0,
+ "stdout": "SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK; SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;"
+ },
+ "/usr/bin/ssh-add": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-add -L": {
+ "code": 0,
+ "stdout": "No keys"
+ },
+ "/usr/bin/ssh-add /build/temp/mySecureFileId.filename": {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /inheritance:r" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/bin/icacls /build/temp/mySecureFileId.filename /grant:r testUser:(F)" : {
+ "code": 0,
+ "stdout": ""
+ },
+ "/usr/bin/ssh-keygen -y -P -f /build/temp/mySecureFileId.filename" : {
+ "code": 0,
+ "stdout": "ssh-rsa KEYINFORMATIONHERE sample@example.com"
+ },
+ "/bin/whoami" : {
+ "code": 0,
+ "stdout": 'testUser'
+ }
+ }
+};
+taskRunner.setAnswers(answers);
+
+taskRunner.run();
+
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/mocks-registrator.ts b/_generated/InstallSSHKeyV0_Node20/Tests/mocks-registrator.ts
new file mode 100644
index 000000000000..4c86292a7940
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/mocks-registrator.ts
@@ -0,0 +1,46 @@
+import os = require('os');
+import { TaskMockRunner } from 'azure-pipelines-task-lib/mock-run';
+
+export class MocksRegistrator {
+ public static register(taskRunner: TaskMockRunner) {
+ let secureFileHelperMock = require('./secure-files-mock.js');
+ taskRunner.registerMock('azure-pipelines-tasks-securefiles-common/securefiles-common', secureFileHelperMock);
+
+ class MockStats {
+ mode = 600;
+ };
+ class MockUser {
+ username = "testUser";
+ };
+
+ taskRunner.registerMock('fs', {
+ writeFileSync: function (filePath, contents) {
+ },
+ existsSync: function (filePath, contents) {
+ return true;
+ },
+ readFileSync: function (filePath) {
+ return 'contents';
+ },
+ statSync: function (filePath) {
+ let s: MockStats = new MockStats();
+ return s;
+ },
+ chmodSync: function (filePath, string) {
+ }
+ });
+
+ taskRunner.registerMock('os', {
+ userInfo: function () {
+ let user: MockUser = new MockUser();
+ return user;
+ },
+ type: function () {
+ return os.type();
+ },
+ homedir: function () {
+ return os.homedir();
+ }
+ });
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/package-lock.json b/_generated/InstallSSHKeyV0_Node20/Tests/package-lock.json
new file mode 100644
index 000000000000..7137c41478aa
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/package-lock.json
@@ -0,0 +1,14 @@
+{
+ "name": "vsts-tasks-installsshkey-tests",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/mocha": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz",
+ "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==",
+ "dev": true
+ }
+ }
+}
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/package.json b/_generated/InstallSSHKeyV0_Node20/Tests/package.json
new file mode 100644
index 000000000000..0273a49261c0
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/package.json
@@ -0,0 +1,22 @@
+{
+ "name": "vsts-tasks-installsshkey-tests",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install SSH Key Task Tests",
+ "main": "L0.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "devDependencies": {
+ "@types/mocha": "^5.2.0"
+ }
+}
diff --git a/_generated/InstallSSHKeyV0_Node20/Tests/secure-files-mock.ts b/_generated/InstallSSHKeyV0_Node20/Tests/secure-files-mock.ts
new file mode 100644
index 000000000000..e821155e5fc8
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/Tests/secure-files-mock.ts
@@ -0,0 +1,19 @@
+import * as tl from "azure-pipelines-task-lib/task";
+
+export class SecureFileHelpers {
+
+ constructor() {
+ tl.debug('Mock SecureFileHelpers constructor');
+ }
+
+ async downloadSecureFile(secureFileId: string) {
+ tl.debug('Mock downloadSecureFile with id = ' + secureFileId);
+ let fileName: string = secureFileId + '.filename';
+ let tempDownloadPath: string = '/build/temp/' + fileName;
+ return tempDownloadPath;
+ }
+
+ deleteSecureFile(secureFileId: string) {
+ tl.debug('Mock deleteSecureFile with id = ' + secureFileId);
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/ThirdPartyNotice.txt b/_generated/InstallSSHKeyV0_Node20/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..e71b5c2eac33
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/ThirdPartyNotice.txt
@@ -0,0 +1,459 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (InstallSSHKeyV0) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/mocha (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+3. @types/q (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+4. balanced-match (git://github.com/juliangruber/balanced-match.git)
+5. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+6. concat-map (git://github.com/substack/node-concat-map.git)
+7. minimatch (git://github.com/isaacs/minimatch.git)
+8. mockery (git://github.com/mfncooper/mockery.git)
+9. q (git://github.com/kriskowal/q.git)
+10. semver (git+https://github.com/npm/node-semver.git)
+11. shelljs (git://github.com/arturadib/shelljs.git)
+12. tunnel (git+https://github.com/koichik/node-tunnel.git)
+13. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+14. underscore (git://github.com/jashkenas/underscore.git)
+15. uuid (git+https://github.com/kelektiv/node-uuid.git)
+16. vso-node-api (git+https://github.com/Microsoft/vso-node-api.git)
+17. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git)
+
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/q NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2017 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
+%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Visual Studio Team Services Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF vso-node-api NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF vsts-task-lib NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/InstallSSHKeyV0_Node20/config-entry.ts b/_generated/InstallSSHKeyV0_Node20/config-entry.ts
new file mode 100644
index 000000000000..de50bfafe437
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/config-entry.ts
@@ -0,0 +1,28 @@
+const os = require('os');
+
+/**
+ * Represents SSH configuration file entry.
+ */
+export class ConfigFileEntry {
+ public constructor(
+ private alias:string,
+ private hostName: string,
+ private user: string,
+ private identityFile: string,
+ private port: string) { }
+
+ public toString(): string {
+ let result: string = '';
+ result += `Host ${this.alias}${os.EOL}`;
+ result += `HostName ${this.hostName}${os.EOL}`;
+ result += `IdentityFile "${this.identityFile}"${os.EOL}`;
+
+ if (this.user) {
+ result += `User "${this.user}"${os.EOL}`;
+ }
+ if (this.port) {
+ result += `Port ${this.port}${os.EOL}`;
+ }
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/icon.png b/_generated/InstallSSHKeyV0_Node20/icon.png
new file mode 100644
index 000000000000..7e9b36a2a91b
Binary files /dev/null and b/_generated/InstallSSHKeyV0_Node20/icon.png differ
diff --git a/_generated/InstallSSHKeyV0_Node20/icon.svg b/_generated/InstallSSHKeyV0_Node20/icon.svg
new file mode 100644
index 000000000000..ee122db2e096
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/icon.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/_generated/InstallSSHKeyV0_Node20/installsshkey-util.ts b/_generated/InstallSSHKeyV0_Node20/installsshkey-util.ts
new file mode 100644
index 000000000000..41de119239df
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/installsshkey-util.ts
@@ -0,0 +1,339 @@
+import fs = require('fs');
+import os = require('os');
+import Q = require('q');
+import path = require('path');
+import process = require('process');
+import child = require('child_process');
+
+import * as tl from 'azure-pipelines-task-lib/task';
+import * as trm from 'azure-pipelines-task-lib/toolrunner';
+
+import { SecureFileHelpers } from 'azure-pipelines-tasks-securefiles-common';
+import { ConfigFileEntry } from './config-entry';
+
+export const postKillAgentSetting: string = 'INSTALL_SSH_KEY_KILL_SSH_AGENT_PID';
+export const postDeleteKeySetting: string = 'INSTALL_SSH_KEY_DELETE_KEY';
+export const postKnownHostsContentsSetting: string = 'INSTALL_SSH_KEY_KNOWN_HOSTS_CONTENTS';
+export const postKnownHostsLocationSetting: string = 'INSTALL_SSH_KEY_KNOWN_HOSTS_LOCATION';
+export const postKnownHostsDeleteFileSetting: string = 'INSTALL_SSH_KEY_KNOWN_HOSTS_FILE_DELETE';
+export const postConfigContentsSetting: string = 'INSTALL_SSH_KEY_CONFIG_CONTENTS';
+export const postConfigLocationSetting: string = 'INSTALL_SSH_KEY_CONFIG_LOCATION';
+export const postConfigDeleteFileSetting: string = 'INSTALL_SSH_KEY_CONFIG_FILE_DELETE';
+
+export const preservedKeyFileIDVariableKey: string = 'INSTALL_SSH_KEY_PRESERVED_KEY_FILE_ID';
+
+export const sshAgentPidEnvVariableKey: string = 'SSH_AGENT_PID';
+export const sshAgentSockEnvVariableKey: string = 'SSH_AUTH_SOCK';
+
+function execSshAddPassphraseSync(tool, args, passphrase):Q.Promise {
+ tl.debug('execSshAddPassphraseSync');
+
+ var defer = Q.defer();
+ let success = true;
+
+ let cp = child.spawn(tool, args, {
+ detached: true // required to work on macOS
+ });
+
+ var processLineBuffer = (data: Buffer, strBuffer: string, onLine:(line: string) => void): void => {
+ try {
+ var s = strBuffer + data.toString();
+ var n = s.indexOf(os.EOL);
+
+ while(n > -1) {
+ var line = s.substring(0, n);
+ onLine(line);
+
+ // the rest of the string ...
+ s = s.substring(n + os.EOL.length);
+ n = s.indexOf(os.EOL);
+ }
+ strBuffer = s;
+ }
+ catch (err) {
+ tl.debug('error processing line');
+ }
+ }
+
+ var stdbuffer: string = '';
+ cp.stdout.on('data', (data: Buffer) => {
+ process.stdout.write(data);
+ processLineBuffer(data, stdbuffer, (line: string) => {
+ tl.debug('stdline:' + line);
+ });
+ });
+
+ var errbuffer: string = '';
+ cp.stderr.on('data', (data: Buffer) => {
+ // ssh-add puts output on stderr
+ process.stderr.write(data);
+ processLineBuffer(data, errbuffer, (line: string) => {
+ tl.debug('errline:' + line);
+ });
+ });
+
+ cp.on('error', (err) => {
+ defer.reject(new Error(tool + ' failed. ' + err.message));
+ });
+
+ cp.on('close', (code, signal) => {
+ tl.debug('rc:' + code);
+
+ if (stdbuffer.length > 0) {
+ tl.debug('stdline:' + stdbuffer);
+ }
+
+ if (errbuffer.length > 0) {
+ tl.debug('errline:' + errbuffer);
+ }
+
+ // Always ignore the return code
+ tl.debug('success:' + success);
+ if (!success) {
+ defer.reject(new Error(tool + ' failed with return code: ' + code));
+ }
+ else {
+ defer.resolve(success);
+ }
+ });
+ tl.debug('writing passphrase');
+ cp.stdin.write(passphrase);
+ cp.stdin.end();
+ tl.debug('passphrase complete');
+
+ return defer.promise;
+}
+
+export class SshToolRunner {
+ private baseDir = tl.getVariable('Agent.HomeDirectory');
+ private sshGitExternalsDir = path.join('externals', path.join('Git', path.join('usr', path.join('bin'))));
+
+ constructor() {
+ }
+
+ private isWindows(): boolean {
+ return !!os.type().match(/^Win/);
+ }
+
+ private getExecutable(executable: string):string {
+ if (this.isWindows() && this.baseDir) {
+ executable = path.join(this.baseDir, path.join(this.sshGitExternalsDir, executable));
+ executable += '.exe';
+ }
+ return executable;
+ }
+
+ private getWindowsUsername(): string {
+ const username: string = tl.execSync('whoami', []).stdout;
+ return username.trim();
+ }
+
+ private restrictPermissionsToFile(fileLocation: string): void {
+ if (this.isWindows()) {
+ const userName: string = this.getWindowsUsername();
+ tl.execSync('icacls', [fileLocation, '/inheritance:r']);
+ tl.execSync('icacls', [fileLocation, '/grant:r', `${userName}:(F)`]);
+ }
+ fs.chmodSync(fileLocation, '0600');
+ }
+
+ private generatePublicKey(privateKeyLocation: string, passphrase: string) {
+ tl.debug(tl.loc("GeneratingPublicKey"));
+ const options: trm.IExecOptions = {
+ silent: true
+ }
+ let args: string[] = ['-y','-P', passphrase || '', '-f', privateKeyLocation]
+ let keygenResult: trm.IExecSyncResult = tl.execSync('ssh-keygen', args, options);
+ return keygenResult.stdout;
+ }
+
+ public runAgent() {
+ // Expected output sample:
+ // SSH_AUTH_SOCK=/tmp/ssh-XVblDhTvcbC3/agent.24196; export SSH_AUTH_SOCK;
+ // SSH_AGENT_PID=4644; export SSH_AGENT_PID; echo Agent pid 4644;
+ let agentResults: trm.IExecSyncResult = tl.execSync(this.getExecutable('ssh-agent'), null);
+
+ let elements: string[] = agentResults.stdout.split(';');
+ for (let i:number = 0; i < elements.length; ++i) {
+ let keyValue : string[] = elements[i].split('=');
+ if (keyValue && keyValue.length >= 2) {
+ let key: string = keyValue[0].trim();
+ let value: string = keyValue[1].trim();
+ tl.debug('Key=' + key + ' value=' + value);
+ if (sshAgentPidEnvVariableKey === key) {
+ tl.setVariable(key, value);
+ tl.setTaskVariable(postKillAgentSetting, value);
+ }
+ else if (sshAgentSockEnvVariableKey === key) {
+ tl.setVariable(key, value);
+ }
+ } else {
+ tl.debug('Skipping ' + elements[i]);
+ }
+ }
+ }
+
+ public async installKey(publicKey: string, privateKeyLocation: string, passphrase: string) {
+ tl.debug('Get a list of the SSH keys in the agent');
+ let results: trm.IExecSyncResult = tl.execSync(this.getExecutable('ssh-add'), '-L');
+
+ // requires user only permissions to add to agent or generate public key
+ let oldMode: number = fs.statSync(privateKeyLocation).mode;
+ this.restrictPermissionsToFile(privateKeyLocation);
+
+ if (!publicKey || publicKey.length === 0) {
+ publicKey = this.generatePublicKey(privateKeyLocation, passphrase);
+ }
+ const publicKeyFile: string = `${privateKeyLocation}.pub`;
+ fs.writeFileSync(publicKeyFile, publicKey);
+
+ let publicKeyComponents: string[] = publicKey.split(' ');
+ if (publicKeyComponents.length <= 1) {
+ throw tl.loc('SSHPublicKeyMalformed');
+ }
+
+ let publicKeyHash: string = publicKeyComponents[1].trim();
+ tl.debug('Checking for public SSH key: ' + publicKeyHash);
+ if (results.stdout.indexOf(publicKeyHash) !== -1) {
+ throw tl.loc('SSHKeyAlreadyInstalled');
+ }
+
+ tl.debug('Adding the SSH key to the agent ' + privateKeyLocation);
+ let installedSSH:boolean = false;
+ if (passphrase) {
+ installedSSH = await execSshAddPassphraseSync(this.getExecutable('ssh-add'), [privateKeyLocation], passphrase);
+ } else {
+ results = tl.execSync(this.getExecutable('ssh-add'), [privateKeyLocation]);
+ installedSSH = !results.error;
+ }
+ if (!installedSSH) {
+ throw tl.loc('SSHKeyInstallFailed');
+ }
+ fs.chmodSync(privateKeyLocation, oldMode);
+ tl.setTaskVariable(postDeleteKeySetting, privateKeyLocation);
+
+ results = tl.execSync(this.getExecutable('ssh-add'), null);
+ }
+
+ public deleteKey(key: string) {
+ let deleteKey: string = tl.getTaskVariable(postDeleteKeySetting);
+ if (deleteKey) {
+ tl.debug('Deleting Key: ' + deleteKey);
+ tl.execSync(this.getExecutable('ssh-add'), ['-d', deleteKey]);
+ }
+ }
+}
+
+export function setKnownHosts(knownHostsEntry: string) {
+ let knownHostsFolder: string = path.join(os.homedir(), '.ssh');
+ let knownHostsFile: string = path.join(knownHostsFolder, 'known_hosts');
+ let knownHostsContent: string = '';
+ let knownHostsDeleteFileOnClose: boolean = true;
+ if (!fs.existsSync(knownHostsFolder)) {
+ fs.mkdirSync(knownHostsFolder);
+ } else if (fs.existsSync(knownHostsFile)) {
+ tl.debug('Read known_hosts');
+ knownHostsDeleteFileOnClose = false;
+ knownHostsContent = fs.readFileSync(knownHostsFile).toString();
+ }
+
+ tl.debug('Inserting entry into known_hosts');
+ const taskAlreadyUsed: boolean = !!tl.getVariable(postKnownHostsLocationSetting);
+ if (taskAlreadyUsed) {
+ fs.appendFileSync(knownHostsFile, `${knownHostsEntry}${os.EOL}`);
+ } else {
+ fs.writeFileSync(knownHostsFile, `${knownHostsEntry}${os.EOL}`);
+ }
+
+ tl.setTaskVariable(postKnownHostsContentsSetting, knownHostsContent);
+ tl.setVariable(postKnownHostsLocationSetting, knownHostsFile);
+ tl.setTaskVariable(postKnownHostsDeleteFileSetting, knownHostsDeleteFileOnClose.toString());
+}
+
+/**
+ * Adds entry to SSH configuration file.
+ * @param {ConfigFileEntry} configEntry
+ */
+export function addConfigEntry(configEntry: ConfigFileEntry): void {
+ const configFolder: string = path.join(os.homedir(), '.ssh');
+ const configFilePath: string = path.join(configFolder, 'config');
+ let configFileContent: string = '';
+ let deleteConfigFileOnClose: boolean = true;
+ if (!fs.existsSync(configFolder)) {
+ fs.mkdirSync(configFolder);
+ } else if (fs.existsSync(configFilePath)) {
+ tl.debug('Reading config file');
+ deleteConfigFileOnClose = false;
+ configFileContent = fs.readFileSync(configFilePath).toString();
+ }
+
+ const configEntryContent: string = configEntry.toString();
+ console.log(tl.loc("InsertingIntoConfig"));
+ console.log(configEntryContent);
+ const configAlreadyChanged: boolean = !!tl.getVariable(postConfigLocationSetting);
+ if (configAlreadyChanged) {
+ fs.appendFileSync(configFilePath, `${os.EOL}${configEntryContent}`);
+ } else {
+ fs.writeFileSync(configFilePath, configEntryContent);
+ }
+
+ tl.setTaskVariable(postConfigContentsSetting, configFileContent);
+ tl.setVariable(postConfigLocationSetting, configFilePath);
+ tl.setTaskVariable(postConfigDeleteFileSetting, deleteConfigFileOnClose.toString());
+}
+
+/**
+ *
+ * @param {string} fileName File name
+ * @param {string} contents File contents which should be restored.
+ * @param {string} location Path to file being restored
+ * @param {boolean} deleteOnExit File should be deleted.
+ */
+function tryRestore(fileName: string, contents: string, location: string, deleteOnExit: boolean): void {
+ if (deleteOnExit && location) {
+ fs.unlinkSync(location);
+ } else if (contents && location) {
+ fs.writeFileSync(location, contents);
+ } else if (location || contents) {
+ tl.warning(tl.loc('CannotResetFile', fileName));
+ tl.debug('(location=' + location + ' content=' + contents + ')');
+ }
+}
+
+/**
+ * Restores known_hosts file to it's initial state.
+ */
+export function tryRestoreKnownHosts() {
+ const knownHostsContents: string = tl.getTaskVariable(postKnownHostsContentsSetting);
+ const knownHostsLocation: string = tl.getVariable(postKnownHostsLocationSetting);
+ const knownHostsDeleteFileOnExit: boolean = tl.getTaskVariable(postKnownHostsDeleteFileSetting) === 'true';
+
+ tl.debug('Restoring known_hosts');
+ tryRestore('known_hosts', knownHostsContents, knownHostsLocation, knownHostsDeleteFileOnExit);
+}
+
+/**
+ * Restores SSH configuration file to it's initial state.
+ */
+export function tryRestoreConfig() {
+ const configContents: string = tl.getTaskVariable(postConfigContentsSetting);
+ const configLocation: string = tl.getVariable(postConfigLocationSetting);
+ const configDeleteFileOnExit: boolean = tl.getTaskVariable(postConfigDeleteFileSetting) === 'true';
+
+ tl.debug('Restoring config');
+ tryRestore('config', configContents, configLocation, configDeleteFileOnExit);
+}
+
+/**
+ * Deletes private key file with ID specified.
+ * @param {string} privateKeyFileID
+ */
+export function tryDeletePrivateKeyFile(privateKeyFileID: string) {
+ if (privateKeyFileID) {
+ tl.debug(tl.loc("DeletePrivateKeyFile"));
+ const secureFileHelpers: SecureFileHelpers = new SecureFileHelpers();
+ secureFileHelpers.deleteSecureFile(privateKeyFileID);
+ } else {
+ tl.debug('No private key file ID was specified.');
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/make.json b/_generated/InstallSSHKeyV0_Node20/make.json
new file mode 100644
index 000000000000..54872a7f7368
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/make.json
@@ -0,0 +1,10 @@
+{
+ "rm": [
+ {
+ "items": [
+ "node_modules/azure-pipelines-tasks-securefiles-common/node_modules/azure-pipelines-task-lib"
+ ],
+ "options": "-Rf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/package-lock.json b/_generated/InstallSSHKeyV0_Node20/package-lock.json
new file mode 100644
index 000000000000..caf97c052327
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/package-lock.json
@@ -0,0 +1,555 @@
+{
+ "name": "vsts-tasks-installsshkey",
+ "version": "1.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-devops-node-api": {
+ "version": "10.2.2",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-10.2.2.tgz",
+ "integrity": "sha512-4TVv2X7oNStT0vLaEfExmy3J4/CzfuXolEcQl/BRUmvGySqKStTG2O55/hUQ0kM7UJlZBLgniM0SBq4d/WkKow==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tasks-securefiles-common": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-securefiles-common/-/azure-pipelines-tasks-securefiles-common-2.1.0.tgz",
+ "integrity": "sha512-oE7VscWFZD+Ku0WM6e2b5Y0eDom4DTZvER/mSh3m/z9V0yN9JUahNR0Dye9NIj0BSIyfgcaxxNWBCzqJMsirIQ==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "@types/q": "^1.5.4",
+ "azure-devops-node-api": "10.2.2",
+ "azure-pipelines-task-lib": "^3.1.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/InstallSSHKeyV0_Node20/package.json b/_generated/InstallSSHKeyV0_Node20/package.json
new file mode 100644
index 000000000000..f0978563362c
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-installsshkey",
+ "version": "1.0.0",
+ "description": "Azure Pipelines Install SSK Key Task",
+ "main": "preinstallsshkey.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+ssh://git@github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/node": "^20.3.1",
+ "@types/q": "^1.5.1",
+ "@types/mocha": "^5.2.7",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "azure-pipelines-tasks-securefiles-common": "2.1.0"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/_generated/InstallSSHKeyV0_Node20/postinstallsshkey.ts b/_generated/InstallSSHKeyV0_Node20/postinstallsshkey.ts
new file mode 100644
index 000000000000..371ad3349d9b
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/postinstallsshkey.ts
@@ -0,0 +1,34 @@
+import * as tl from 'azure-pipelines-task-lib/task';
+import ps = require('process');
+import path = require('path');
+import util = require('./installsshkey-util');
+
+async function run() {
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+ try {
+ util.tryRestoreKnownHosts();
+ util.tryRestoreConfig();
+
+ let agentPid: string = tl.getTaskVariable(util.postKillAgentSetting);
+ if (agentPid) {
+ tl.debug('Killing SSH Agent PID: ' + agentPid);
+ try {
+ ps.kill(+agentPid);
+ } catch (err) {
+ // This gets cleaned up by the agent anyways, best effort
+ tl.debug(`Killing SSH Agent failed with error: ${err}`);
+ }
+ } else {
+ let deleteKey: string = tl.getTaskVariable(util.postDeleteKeySetting);
+ let sshTool: util.SshToolRunner = new util.SshToolRunner();
+ sshTool.deleteKey(deleteKey)
+ }
+
+ const privateKeyFileID: string = tl.getTaskVariable(util.preservedKeyFileIDVariableKey);
+ util.tryDeletePrivateKeyFile(privateKeyFileID);
+ } catch (err) {
+ tl.setResult(tl.TaskResult.Failed, err);
+ }
+}
+
+run();
diff --git a/_generated/InstallSSHKeyV0_Node20/preinstallsshkey.ts b/_generated/InstallSSHKeyV0_Node20/preinstallsshkey.ts
new file mode 100644
index 000000000000..214c784f77c8
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/preinstallsshkey.ts
@@ -0,0 +1,61 @@
+import fs = require('fs');
+import os = require('os');
+import path = require('path');
+import secureFilesCommon = require('azure-pipelines-tasks-securefiles-common/securefiles-common');
+import * as tl from 'azure-pipelines-task-lib/task';
+import util = require('./installsshkey-util');
+import { ConfigFileEntry } from "./config-entry"
+
+async function run() {
+
+ let secureFileId: string;
+ let secureFileHelpers: secureFilesCommon.SecureFileHelpers;
+ const addConfigEntry: boolean = tl.getBoolInput('addEntryToConfig', false);
+
+ try {
+ let publicKey: string = tl.getInput('sshPublicKey', false);
+ let knownHostsEntry: string = tl.getInput('hostName', true).trim();
+ let passphrase: string = tl.getInput('sshPassphrase', false);
+ passphrase = !passphrase ? passphrase : passphrase.trim();
+ publicKey = !publicKey ? publicKey : publicKey.trim();
+
+ tl.setResourcePath(path.join(__dirname, 'task.json'));
+
+ // download ssh key contents
+ secureFileId = tl.getInput('sshKeySecureFile', true);
+ secureFileHelpers = new secureFilesCommon.SecureFileHelpers();
+ let privateKeyLocation: string = await secureFileHelpers.downloadSecureFile(secureFileId);
+
+ let sshTool: util.SshToolRunner = new util.SshToolRunner();
+
+ let pid: string = tl.getVariable(util.sshAgentPidEnvVariableKey);
+ let sock: string = tl.getVariable(util.sshAgentSockEnvVariableKey);
+ tl.debug('PID=' + pid + ' SOCK=' + sock);
+ if (!pid || !sock) {
+ sshTool.runAgent();
+ }
+
+ await sshTool.installKey(publicKey, privateKeyLocation, passphrase);
+ util.setKnownHosts(knownHostsEntry);
+
+ if (addConfigEntry) {
+ const alias: string = tl.getInput('configHostAlias', true);
+ const user: string = tl.getInput('configUser', false);
+ const hostname: string = tl.getInput('configHostname', true);
+ const port: string = tl.getInput('configPort', false);
+ const configEntry: ConfigFileEntry = new ConfigFileEntry(alias, hostname, user, privateKeyLocation, port);
+ util.addConfigEntry(configEntry);
+ tl.setTaskVariable(util.preservedKeyFileIDVariableKey, secureFileId);
+ }
+ } catch(err) {
+ tl.setResult(tl.TaskResult.Failed, err);
+ } finally {
+ // delete SSH key from temp location after installing
+ if (!addConfigEntry && secureFileId && secureFileHelpers) {
+ secureFileHelpers.deleteSecureFile(secureFileId);
+ }
+ }
+ tl.debug('End');
+}
+
+run();
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/task.json b/_generated/InstallSSHKeyV0_Node20/task.json
new file mode 100644
index 000000000000..5761a0e6ed77
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/task.json
@@ -0,0 +1,174 @@
+{
+ "id": "5c9af2eb-5fc5-42dc-9b91-dc234a8c4400",
+ "name": "InstallSSHKey",
+ "friendlyName": "Install SSH key",
+ "description": "Install an SSH key prior to a build or deployment",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-ssh-key",
+ "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=875267)",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 0,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "Install an SSH key",
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "Advanced",
+ "isExpanded": false
+ }
+ ],
+ "inputs": [
+ {
+ "name": "hostName",
+ "aliases": [
+ "knownHostsEntry"
+ ],
+ "type": "multiLine",
+ "label": "Known Hosts Entry",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "The entry for this SSH key for the known_hosts file. Supports several hosts."
+ },
+ {
+ "name": "sshPublicKey",
+ "type": "string",
+ "label": "SSH Public Key",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "The contents of the public SSH key. If not specified it will be generated out of private key."
+ },
+ {
+ "name": "sshPassphrase",
+ "type": "string",
+ "label": "SSH Passphrase",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "The passphrase for the SSH key, if any."
+ },
+ {
+ "name": "sshKeySecureFile",
+ "type": "secureFile",
+ "label": "SSH Key",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "Select the SSH key that was uploaded to `Secure Files` to install on the agent."
+ },
+ {
+ "name": "addEntryToConfig",
+ "type": "boolean",
+ "label": "Add entry to SSH config",
+ "defaultValue": false,
+ "required": false,
+ "groupName": "advanced",
+ "helpMarkDown": "Add entry related to the key installed to the SSH config file. The key file will be available for all subsequent tasks."
+ },
+ {
+ "name": "configHostAlias",
+ "type": "string",
+ "label": "Alias",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "Name of SSH config entry"
+ },
+ {
+ "name": "configHostname",
+ "type": "string",
+ "label": "Host name",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "Host name property of SSH config entry"
+ },
+ {
+ "name": "configUser",
+ "type": "string",
+ "label": "User",
+ "defaultValue": "",
+ "required": false,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "Username property of SSH config entry"
+ },
+ {
+ "name": "configPort",
+ "type": "string",
+ "label": "Port",
+ "defaultValue": "",
+ "required": false,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "Port of SSH config entry"
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "SSH_AGENT_PID",
+ "SSH_AUTH_SOCK",
+ "INSTALL_SSH_KEY_CONFIG_LOCATION",
+ "INSTALL_SSH_KEY_KNOWN_HOSTS_LOCATION"
+ ]
+ }
+ },
+ "messages": {
+ "SSHKeyAlreadyInstalled": "The SSH key is already installed.",
+ "SSHPublicKeyMalformed": "Could not get the base64 portion of the public SSH key.",
+ "SSHKeyInstallFailed": "Failed to install the SSH key.",
+ "CannotResetKnownHosts": "Cannot reset the known_hosts file to its original values.",
+ "GeneratingPublicKey": "Generating public key out of private one.",
+ "CannotResetFile": "Cannot reset the %s file to its original values.",
+ "DeletePrivateKeyFile": "Deleting private key file.",
+ "InsertingIntoConfig": "Inserting entry into config file:"
+ },
+ "_buildConfigMapping": {
+ "Default": "0.229.3",
+ "Node20-225": "0.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/task.loc.json b/_generated/InstallSSHKeyV0_Node20/task.loc.json
new file mode 100644
index 000000000000..6b56b62f4487
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/task.loc.json
@@ -0,0 +1,174 @@
+{
+ "id": "5c9af2eb-5fc5-42dc-9b91-dc234a8c4400",
+ "name": "InstallSSHKey",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/install-ssh-key",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Utility",
+ "visibility": [
+ "Build",
+ "Release"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 0,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "demands": [],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "groups": [
+ {
+ "name": "advanced",
+ "displayName": "ms-resource:loc.group.displayName.advanced",
+ "isExpanded": false
+ }
+ ],
+ "inputs": [
+ {
+ "name": "hostName",
+ "aliases": [
+ "knownHostsEntry"
+ ],
+ "type": "multiLine",
+ "label": "ms-resource:loc.input.label.hostName",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.hostName"
+ },
+ {
+ "name": "sshPublicKey",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.sshPublicKey",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.sshPublicKey"
+ },
+ {
+ "name": "sshPassphrase",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.sshPassphrase",
+ "defaultValue": "",
+ "required": false,
+ "helpMarkDown": "ms-resource:loc.input.help.sshPassphrase"
+ },
+ {
+ "name": "sshKeySecureFile",
+ "type": "secureFile",
+ "label": "ms-resource:loc.input.label.sshKeySecureFile",
+ "defaultValue": "",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.sshKeySecureFile"
+ },
+ {
+ "name": "addEntryToConfig",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.addEntryToConfig",
+ "defaultValue": false,
+ "required": false,
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.addEntryToConfig"
+ },
+ {
+ "name": "configHostAlias",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.configHostAlias",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.configHostAlias"
+ },
+ {
+ "name": "configHostname",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.configHostname",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.configHostname"
+ },
+ {
+ "name": "configUser",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.configUser",
+ "defaultValue": "",
+ "required": false,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.configUser"
+ },
+ {
+ "name": "configPort",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.configPort",
+ "defaultValue": "",
+ "required": false,
+ "visibleRule": "addEntryToConfig = true",
+ "groupName": "advanced",
+ "helpMarkDown": "ms-resource:loc.input.help.configPort"
+ }
+ ],
+ "prejobexecution": {
+ "Node10": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "preinstallsshkey.js",
+ "argumentFormat": ""
+ }
+ },
+ "postjobexecution": {
+ "Node10": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "postinstallsshkey.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "SSH_AGENT_PID",
+ "SSH_AUTH_SOCK",
+ "INSTALL_SSH_KEY_CONFIG_LOCATION",
+ "INSTALL_SSH_KEY_KNOWN_HOSTS_LOCATION"
+ ]
+ }
+ },
+ "messages": {
+ "SSHKeyAlreadyInstalled": "ms-resource:loc.messages.SSHKeyAlreadyInstalled",
+ "SSHPublicKeyMalformed": "ms-resource:loc.messages.SSHPublicKeyMalformed",
+ "SSHKeyInstallFailed": "ms-resource:loc.messages.SSHKeyInstallFailed",
+ "CannotResetKnownHosts": "ms-resource:loc.messages.CannotResetKnownHosts",
+ "GeneratingPublicKey": "ms-resource:loc.messages.GeneratingPublicKey",
+ "CannotResetFile": "ms-resource:loc.messages.CannotResetFile",
+ "DeletePrivateKeyFile": "ms-resource:loc.messages.DeletePrivateKeyFile",
+ "InsertingIntoConfig": "ms-resource:loc.messages.InsertingIntoConfig"
+ },
+ "_buildConfigMapping": {
+ "Default": "0.229.3",
+ "Node20-225": "0.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/InstallSSHKeyV0_Node20/tsconfig.json b/_generated/InstallSSHKeyV0_Node20/tsconfig.json
new file mode 100644
index 000000000000..0438b79f69ac
--- /dev/null
+++ b/_generated/InstallSSHKeyV0_Node20/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs"
+ }
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0.versionmap.txt b/_generated/JavaToolInstallerV0.versionmap.txt
new file mode 100644
index 000000000000..623498f87a5e
--- /dev/null
+++ b/_generated/JavaToolInstallerV0.versionmap.txt
@@ -0,0 +1,2 @@
+Default|0.229.3
+Node20-225|0.229.4
diff --git a/_generated/JavaToolInstallerV0/AzureStorageArtifacts/AzureStorageArtifactDownloader.ts b/_generated/JavaToolInstallerV0/AzureStorageArtifacts/AzureStorageArtifactDownloader.ts
new file mode 100644
index 000000000000..f90cf5d84970
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/AzureStorageArtifacts/AzureStorageArtifactDownloader.ts
@@ -0,0 +1,124 @@
+import * as tl from 'azure-pipelines-task-lib/task';
+import msRestAzure = require('azure-pipelines-tasks-azure-arm-rest/azure-arm-common');
+import Model = require('azure-pipelines-tasks-azure-arm-rest/azureModels');
+import armStorage = require('azure-pipelines-tasks-azure-arm-rest/azure-arm-storage');
+import BlobService = require('azp-tasks-az-blobstorage-provider/blobservice');
+import { AzureEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azureModels';
+import { AzureRMEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-endpoint';
+
+export class AzureStorageArtifactDownloader {
+ public connectedService: string;
+ public azureStorageAccountName: string;
+ public azureResourceGroupName?: string;
+ public containerName: string;
+ public commonVirtualPath: string;
+
+
+ constructor(connectedService: string, azureStorageAccountName: string, containerName: string, commonVirtualPath: string, azureResourceGroupName?: string) {
+ this.connectedService = connectedService;
+ this.azureStorageAccountName = azureStorageAccountName;
+ this.azureResourceGroupName = azureResourceGroupName;
+ this.containerName = containerName;
+ this.commonVirtualPath = commonVirtualPath;
+ }
+
+ public async downloadArtifacts(downloadToPath: string, fileType: string): Promise {
+ try {
+ console.log(tl.loc('DownloadFromAzureBlobStorage', this.containerName));
+
+ const storageAccount: StorageAccountInfo = await this._getStorageAccountDetails();
+
+ const blobService = new BlobService.BlobService(storageAccount.name, storageAccount.primaryAccessKey);
+
+ await blobService.downloadBlobs(downloadToPath, this.containerName, this.commonVirtualPath, fileType || "**");
+
+ } catch (e) {
+ if (e.statusCode === 414) throw new Error(tl.loc('RequestedUrlTooLong'));
+ throw e;
+ }
+ }
+
+ private async _getStorageAccountDetails(): Promise {
+ tl.debug("Getting storage account details for " + this.azureStorageAccountName);
+
+ const subscriptionId: string = tl.getEndpointDataParameter(this.connectedService, "subscriptionId", false);
+ const credentials = await this._getARMCredentials();
+ const storageArmClient = new armStorage.StorageManagementClient(credentials, subscriptionId);
+
+ const isUseOldStorageAccountQuery = process.env.AZP_TASK_FF_JAVATOOLINSTALLER_USE_OLD_SA_QUERY
+ ? !!process.env.AZP_TASK_FF_JAVATOOLINSTALLER_USE_OLD_SA_QUERY
+ : false;
+
+ let storageAccount = null;
+ if (this.azureResourceGroupName) {
+ tl.debug("Group name is provided. Using fast query to get storage account details.");
+ storageAccount = await this._getStorageAccountWithResourceGroup(storageArmClient, this.azureResourceGroupName, this.azureStorageAccountName);
+ }
+
+ if (!storageAccount) {
+ tl.debug("Group name is not provided or fast query failed. Using legacy query to get storage account details.");
+ storageAccount = isUseOldStorageAccountQuery
+ ? await this._legacyGetStorageAccount(storageArmClient)
+ : await this._getStorageAccount(storageArmClient);
+
+ }
+
+ const storageAccountResourceGroupName = armStorage.StorageAccounts.getResourceGroupNameFromUri(storageAccount.id);
+
+ tl.debug("Listing storage access keys...");
+ const accessKeys = await storageArmClient.storageAccounts.listKeys(storageAccountResourceGroupName, this.azureStorageAccountName, null, storageAccount.type);
+
+ return {
+ name: this.azureStorageAccountName,
+ resourceGroupName: storageAccountResourceGroupName,
+ primaryAccessKey: accessKeys[0]
+ }
+ }
+
+ private async _legacyGetStorageAccount(storageArmClient: armStorage.StorageManagementClient): Promise {
+ const storageAccounts = await storageArmClient.storageAccounts.listClassicAndRMAccounts(null);
+ const index = storageAccounts.findIndex(account => account.name.toLowerCase() == this.azureStorageAccountName.toLowerCase());
+ if (index < 0) {
+ throw new Error(tl.loc("StorageAccountDoesNotExist", this.azureStorageAccountName));
+ }
+
+ return storageAccounts[index];
+ }
+
+ private async _getStorageAccount(storageArmClient: armStorage.StorageManagementClient): Promise {
+ const storageAccount = await storageArmClient.storageAccounts.getClassicOrArmAccountByName(this.azureStorageAccountName, null);
+
+ if (!storageAccount) {
+ throw new Error(tl.loc('StorageAccountDoesNotExist', this.azureStorageAccountName));
+ }
+
+ return storageAccount;
+ }
+
+ private async _getStorageAccountWithResourceGroup(storageArmClient: armStorage.StorageManagementClient, resourceGroupName: string, storageAccountName: string): Promise {
+ let storageAccount = undefined;
+
+ try {
+ storageAccount = await storageArmClient.storageAccounts.getStorageAccountProperties(resourceGroupName, storageAccountName);
+ } catch (e) {
+ tl.warning("Failed to get storage account details using fast query.");
+ }
+
+ if (storageAccount) {
+ tl.debug("Found storage account details using fast query.");
+ }
+
+ return storageAccount;
+ }
+
+ private async _getARMCredentials(): Promise {
+ const endpoint: AzureEndpoint = await new AzureRMEndpoint(this.connectedService).getEndpoint();
+ return endpoint.applicationTokenCredentials;
+ }
+}
+
+interface StorageAccountInfo {
+ name: string;
+ resourceGroupName: string;
+ primaryAccessKey: string;
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/FileExtractor/JavaFilesExtractor.ts b/_generated/JavaToolInstallerV0/FileExtractor/JavaFilesExtractor.ts
new file mode 100644
index 000000000000..5e03522e52e5
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/FileExtractor/JavaFilesExtractor.ts
@@ -0,0 +1,259 @@
+import * as fs from 'fs';
+import * as os from 'os';
+import * as path from 'path';
+import * as taskLib from 'azure-pipelines-task-lib/task';
+import * as toolLib from 'azure-pipelines-tool-lib/tool';
+
+const supportedFileEndings: string[] = ['.tar', '.tar.gz', '.zip', '.7z', '.dmg', '.pkg'];
+
+export const BIN_FOLDER: string = 'bin';
+
+interface IDirectoriesDictionary {
+ [key: string]: null
+}
+
+export class JavaFilesExtractor {
+ private readonly ERR_SHARE_ACCESS = -4094;
+ public destinationFolder: string;
+ public readonly win: boolean;
+
+ // 7zip
+ public xpSevenZipLocation: string;
+ public winSevenZipLocation: string = path.join(__dirname, '7zip/7z.exe');
+
+ constructor() {
+ this.win = (os.platform() === 'win32');
+ taskLib.debug('win: ' + this.win);
+ }
+
+ private getSevenZipLocation(): string {
+ if (this.win) {
+ return this.winSevenZipLocation;
+ } else {
+ if (typeof this.xpSevenZipLocation === "undefined") {
+ this.xpSevenZipLocation = taskLib.which('7z', true);
+ }
+ return this.xpSevenZipLocation;
+ }
+ }
+
+ private static isTar(file: string): boolean {
+ const name: string = file.toLowerCase();
+ // standard gnu-tar extension formats with recognized auto compression formats
+ // https://www.gnu.org/software/tar/manual/html_section/tar_69.html
+ return name.endsWith('.tar') // no compression
+ || name.endsWith('.tar.gz') // gzip
+ || name.endsWith('.tgz') // gzip
+ || name.endsWith('.taz') // gzip
+ || name.endsWith('.tar.z') // compress
+ || name.endsWith('.tar.bz2') // bzip2
+ || name.endsWith('.tz2') // bzip2
+ || name.endsWith('.tbz2') // bzip2
+ || name.endsWith('.tbz') // bzip2
+ || name.endsWith('.tar.lz') // lzip
+ || name.endsWith('.tar.lzma') // lzma
+ || name.endsWith('.tlz') // lzma
+ || name.endsWith('.tar.lzo') // lzop
+ || name.endsWith('.tar.xz') // xz
+ || name.endsWith('.txz'); // xz
+ }
+
+ private sevenZipExtract(file: string, destinationFolder: string) {
+ //We have to create our own 7Zip extract function as the vsts-task-tool-lib
+ //method uses 7zDec, which only decodes .7z archives
+ console.log(taskLib.loc('SevenZipExtractFile', file));
+ const sevenZip = taskLib.tool(this.getSevenZipLocation());
+ sevenZip.arg('x');
+ sevenZip.arg('-o' + destinationFolder);
+ sevenZip.arg(file);
+ const execResult = sevenZip.execSync();
+ if (execResult.code != taskLib.TaskResult.Succeeded) {
+ taskLib.debug('execResult: ' + JSON.stringify(execResult));
+ }
+ }
+
+ /**
+ * Get file ending if it is supported. Otherwise throw an error.
+ * Find file ending, not extension. For example, there is supported .tar.gz file ending but the extension is .gz.
+ * @param file Path to a file.
+ * @returns string
+ */
+ public static getSupportedFileEnding(file: string): string {
+ const fileEnding: string = supportedFileEndings.find(ending => file.endsWith(ending));
+
+ if (fileEnding) {
+ return fileEnding;
+ } else {
+ throw new Error(taskLib.loc('UnsupportedFileExtension'));
+ }
+ }
+
+ private async extractFiles(file: string, fileEnding: string): Promise {
+ const stats = taskLib.stats(file);
+ if (!stats) {
+ throw new Error(taskLib.loc('ExtractNonExistFile', file));
+ } else if (stats.isDirectory()) {
+ throw new Error(taskLib.loc('ExtractDirFailed', file));
+ }
+
+ if (this.win) {
+ if ('.tar' === fileEnding) { // a simple tar
+ this.sevenZipExtract(file, this.destinationFolder);
+ } else if (JavaFilesExtractor.isTar(file)) { // a compressed tar, e.g. 'fullFilePath/test.tar.gz'
+ // e.g. 'fullFilePath/test.tar.gz' --> 'test.tar.gz'
+ const shortFileName = path.basename(file);
+ // e.g. 'destinationFolder/_test.tar.gz_'
+ const tempFolder = path.normalize(this.destinationFolder + path.sep + '_' + shortFileName + '_');
+ console.log(taskLib.loc('CreateTempDir', tempFolder, file));
+
+ // 0 create temp folder
+ taskLib.mkdirP(tempFolder);
+
+ // 1 extract compressed tar
+ this.sevenZipExtract(file, tempFolder);
+
+ console.log(taskLib.loc('TempDir', tempFolder));
+ const tempTar = tempFolder + path.sep + taskLib.ls('-A', [tempFolder])[0]; // should be only one
+ console.log(taskLib.loc('DecompressedTempTar', file, tempTar));
+
+ // 2 expand extracted tar
+ this.sevenZipExtract(tempTar, this.destinationFolder);
+
+ // 3 cleanup temp folder
+ console.log(taskLib.loc('RemoveTempDir', tempFolder));
+ taskLib.rmRF(tempFolder);
+ } else { // use sevenZip
+ this.sevenZipExtract(file, this.destinationFolder);
+ }
+ } else { // not windows
+ if ('.tar' === fileEnding || '.tar.gz' === fileEnding) {
+ await toolLib.extractTar(file, this.destinationFolder);
+ } else if ('.zip' === fileEnding) {
+ await toolLib.extractZip(file, this.destinationFolder);
+ } else { // fall through and use sevenZip
+ this.sevenZipExtract(file, this.destinationFolder);
+ }
+ }
+ }
+
+ // This method recursively finds all .pack files under fsPath and unpacks them with the unpack200 tool
+ public static unpackJars(fsPath: string, javaBinPath: string): void {
+ if (fs.existsSync(fsPath)) {
+ if (fs.lstatSync(fsPath).isDirectory()) {
+ fs.readdirSync(fsPath).forEach(function(file){
+ const curPath = path.join(fsPath, file);
+ JavaFilesExtractor.unpackJars(curPath, javaBinPath);
+ });
+ } else if (path.extname(fsPath).toLowerCase() === '.pack') {
+ // Unpack the pack file synchronously
+ const p = path.parse(fsPath);
+ const toolName = process.platform.match(/^win/i) ? 'unpack200.exe' : 'unpack200';
+ const args = process.platform.match(/^win/i) ? '-r -v -l ""' : '';
+ const name = path.join(p.dir, p.name);
+ taskLib.execSync(path.join(javaBinPath, toolName), `${args} "${name}.pack" "${name}.jar"`);
+ }
+ }
+ }
+
+ /**
+ * Creates a list of directories on the root level of structure.
+ * @param pathsArray - contains paths to all the files inside the structure
+ * @param root - path to the directory we want to get the structure of
+ */
+ public static sliceStructure(pathsArray: Array, root: string = pathsArray[0]): Array{
+ const dirPathLength = root.length;
+ const structureObject: IDirectoriesDictionary = {};
+ for(let i = 0; i < pathsArray.length; i++){
+ const pathStr = pathsArray[i];
+ const cleanPathStr = pathStr.slice(dirPathLength + 1);
+ if (cleanPathStr === '') {
+ continue;
+ }
+ const dirPathArray = cleanPathStr.split(path.sep);
+ // Create the list of unique values
+ structureObject[dirPathArray[0]] = null;
+ }
+ return Object.keys(structureObject);
+ }
+
+ /**
+ * Returns name w/o file ending
+ * @param name - name of the file
+ */
+ public static getStrippedName(name: string): string {
+ const fileBaseName: string = path.basename(name);
+ const fileEnding: string = JavaFilesExtractor.getSupportedFileEnding(fileBaseName);
+ return fileBaseName.substring(0, fileBaseName.length - fileEnding.length);
+ }
+
+ /**
+ * Returns path to JAVA_HOME, or throw exception if the extracted archive isn't valid
+ * @param pathToStructure - path to files extracted from the JDK archive
+ */
+ public static getJavaHomeFromStructure(pathToStructure): string {
+ const structure: Array = taskLib.find(pathToStructure);
+ const rootItemsArray: Array = JavaFilesExtractor.sliceStructure(structure);
+ const rootDirectoriesArray: Array = new Array();
+ // it is allowed to have extra files in extraction directory, but we shouldn't have more than 1 directory here
+ rootItemsArray.forEach(rootItem => {
+ if (fs.lstatSync(path.join(pathToStructure, rootItem)).isDirectory()) {
+ rootDirectoriesArray.push(rootItem);
+ }
+ });
+ if(rootDirectoriesArray.length == 0) {
+ throw new Error(taskLib.loc('WrongArchiveFile'));
+ }
+ let jdkDirectory: string;
+ if (rootDirectoriesArray.find(dir => dir === BIN_FOLDER)){
+ jdkDirectory = pathToStructure;
+ } else {
+ jdkDirectory = path.join(pathToStructure, rootDirectoriesArray[0]);
+ const ifBinExistsInside: boolean = fs.existsSync(path.join(jdkDirectory, BIN_FOLDER));
+ if (rootDirectoriesArray.length > 1 || !ifBinExistsInside){
+ throw new Error(taskLib.loc('WrongArchiveStructure'));
+ }
+ }
+ return jdkDirectory;
+ }
+
+ /**
+ * Validate files structure if it can be a JDK, then set JAVA_HOME and returns it.
+ * @param pathToExtractedJDK - path to files extracted from the JDK archive
+ * @param withValidation - validate files and search bin inside
+ */
+ public static setJavaHome(pathToExtractedJDK: string, withValidation: boolean = true): string {
+ let jdkDirectory: string = withValidation ?
+ JavaFilesExtractor.getJavaHomeFromStructure(pathToExtractedJDK) :
+ pathToExtractedJDK;
+ console.log(taskLib.loc('SetJavaHome', jdkDirectory));
+ taskLib.setVariable('JAVA_HOME', jdkDirectory);
+ return jdkDirectory;
+ }
+
+ public async unzipJavaDownload(repoRoot: string, fileEnding: string, extractLocation: string): Promise {
+ this.destinationFolder = extractLocation;
+
+ // Create the destination folder if it doesn't exist
+ if (!taskLib.exist(this.destinationFolder)) {
+ console.log(taskLib.loc('CreateDestDir', this.destinationFolder));
+ taskLib.mkdirP(this.destinationFolder);
+ }
+
+ const jdkFile = path.normalize(repoRoot);
+ let stats: taskLib.FsStats;
+ try {
+ stats = taskLib.stats(jdkFile);
+ } catch (error) {
+ if (error.errno === this.ERR_SHARE_ACCESS) {
+ throw new Error(taskLib.loc('ShareAccessError', error.path));
+ }
+ throw(error);
+ }
+ if (stats.isFile()) {
+ await this.extractFiles(jdkFile, fileEnding);
+ }
+ const jdkDirectory: string = JavaFilesExtractor.getJavaHomeFromStructure(this.destinationFolder);
+ JavaFilesExtractor.unpackJars(jdkDirectory, path.join(jdkDirectory, BIN_FOLDER));
+ return jdkDirectory;
+ }
+}
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/de-DE/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..67ace33015ae
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Installer für Java-Tools",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=875287) oder [Java-Dokumentation anzeigen](https://docs.oracle.com/java/)",
+ "loc.description": "Hiermit wird eine bestimmte Java-Version aus einem benutzerseitig bereitgestellten Azure-Blob oder dem Toolcache abgerufen und JAVA_HOME festgelegt.",
+ "loc.instanceNameFormat": "Java $(versionSpec) verwenden",
+ "loc.group.displayName.JavaInAzureGroup": "Java aus einem Azure-Blob herunterladen",
+ "loc.input.label.versionSpec": "JDK-Version",
+ "loc.input.help.versionSpec": "Eine Zahl, die die JDK-Version angibt, die im Pfad verfügbar gemacht werden soll. Verwenden Sie eine ganzzahlige Versionsnummer, z. B. 10.",
+ "loc.input.label.jdkArchitectureOption": "JDK-Architektur",
+ "loc.input.help.jdkArchitectureOption": "Die Architektur (x86, x64) des JDK.",
+ "loc.input.label.jdkSourceOption": "JDK-Quelle",
+ "loc.input.help.jdkSourceOption": "Quelle für das komprimierte JDK.",
+ "loc.input.label.jdkFile": "JDK-Datei",
+ "loc.input.help.jdkFile": "Der Pfad zum Speicherort des komprimierten JDK. Der Pfad kann sich in Ihrem Quellrepository befinden oder ein lokaler Pfad auf dem Agent sein.",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure-Abonnement",
+ "loc.input.help.azureResourceManagerEndpoint": "Wählen Sie das Azure Resource Manager-Abonnement für das JDK aus.",
+ "loc.input.label.azureStorageAccountName": "Speicherkontoname",
+ "loc.input.help.azureStorageAccountName": "Klassische Azure-Speicherkonten und Resource Manager-Speicherkonten werden aufgeführt. Wählen Sie den Speicherkontonamen aus, in dem sich das JDK befindet.",
+ "loc.input.label.azureContainerName": "Containername",
+ "loc.input.help.azureContainerName": "Name des Containers in dem Speicherkonto, in dem sich das JDK befindet.",
+ "loc.input.label.azureCommonVirtualFile": "Gemeinsamer virtueller Pfad",
+ "loc.input.help.azureCommonVirtualFile": "Pfad zum JDK innerhalb des Azure-Speichercontainers.",
+ "loc.input.label.jdkDestinationDirectory": "Zielverzeichnis",
+ "loc.input.help.jdkDestinationDirectory": "Unter Linux und Windows wird dieses Verzeichnis als Zielverzeichnis für die JDK-Installation verwendet. Unter macOS wird dieses Verzeichnis als temporärer Ordner zum Extrahieren von DMG-Dateien verwendet, weil macOS die Installation von JDK in einem bestimmten Verzeichnis nicht unterstützt.",
+ "loc.input.label.azureResourceGroupName": "Ressourcengruppenname",
+ "loc.input.help.azureResourceGroupName": "Ressourcengruppenname des Speicherkontos.",
+ "loc.input.label.cleanDestinationDirectory": "Zielverzeichnis bereinigen",
+ "loc.input.help.cleanDestinationDirectory": "Wählen Sie diese Option aus, um das Zielverzeichnis zu bereinigen, bevor JDK in dieses extrahiert wird.",
+ "loc.input.label.createExtractDirectory": "Verzeichnis zum Extrahieren erstellen",
+ "loc.input.help.createExtractDirectory": "Standardmäßig erstellt die Aufgabe ein Verzeichnis, das diesem JAVA_HOME_8_X64_OpenJDK_zip für das Extrahieren von JDK ähnelt. Mit dieser Option kann die Erstellung dieses Ordners deaktiviert werden. In diesem Fall befindet sich JDK im Stamm von jdkDestinationDirectory.",
+ "loc.messages.DownloadFromAzureBlobStorage": "Artefakte werden aus dem Azure-Blobspeicher heruntergeladen, Containername: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "Erfolgreich abgerufene Elementliste",
+ "loc.messages.StorageAccountDoesNotExist": "Fehler beim Abrufen des Azure-Speicherkontos mit dem Namen %s.",
+ "loc.messages.RequestedUrlTooLong": "Die angeforderte URL ist zu lang. Dies geschieht in der Regel, wenn sich viele Ressourcengruppen im Abonnement befinden. Versuchen Sie, die AzureResourceGroupName-Eingabe festzulegen.",
+ "loc.messages.UnzipExtractFile": "Die Datei wird extrahiert: %s",
+ "loc.messages.SevenZipExtractFile": "Die Datei wird extrahiert: %s",
+ "loc.messages.TarExtractFile": "Die Datei wird extrahiert: %s",
+ "loc.messages.ExtractFileFailedMsg": "Fehler beim Extrahieren der Datei: %s \nCode: %d \nstdout: %s \nstderr: %s \nFehler: %s;",
+ "loc.messages.ExtractNonExistFile": "Fehler beim Extrahieren der Datei \"%s\", weil die Datei nicht vorhanden ist.",
+ "loc.messages.ExtractDirFailed": "Fehler beim Extrahieren der Datei \"%s\", weil es sich um einen Ordner handelt.",
+ "loc.messages.CreateTempDir": "Der temporäre Ordner \"%s\" für die Dekomprimierung wird erstellt: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Die temporäre TAR-Datei wurde von \"%s\" nach \"%s\" dekomprimiert.",
+ "loc.messages.RemoveTempDir": "Der temporäre Ordner wird entfernt: %s",
+ "loc.messages.ExtractFailedCannotCreate": "Fehler beim Extrahieren der Datei \"%s\", weil der temporäre Speicherort nicht erstellt werden konnte: %s",
+ "loc.messages.CleanDestDir": "Der Zielordner wird vor dem Extrahieren bereinigt: %s",
+ "loc.messages.CreateDestDir": "Der Zielordner wird erstellt: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Das JDK wird aus dem Azure-Blobspeicher abgerufen.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Das JDK wird aus einem lokalen Pfad abgerufen.",
+ "loc.messages.SucceedMsg": "Alle Dateien wurden erfolgreich extrahiert.",
+ "loc.messages.SetJavaHome": "JAVA_HOME wird festgelegt auf: %s",
+ "loc.messages.SetExtendedJavaHome": "\"%s\" wird festgelegt auf: %s",
+ "loc.messages.UnsupportedFileExtension": "Die angegebene JDK-Quelldatei weist keine unterstützte Dateierweiterung auf.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Ein Zugriffstoken für Azure konnte nicht abgerufen werden. Statuscode: %s, Statusmeldung: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Ein Zugriffstoken für den verwalteten Dienstprinzipal konnte nicht abgerufen werden. Konfigurieren Sie die verwaltete Dienstidentität (MSI) für den virtuellen Computer (https://aka.ms/azure-msi-docs). Statuscode: %s, Statusmeldung: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Ein Zugriffstoken für den verwalteten Dienstprinzipal konnte nicht abgerufen werden. Statuscode: %s, Statusmeldung: %s",
+ "loc.messages.ExpiredServicePrincipal": "Das Zugriffstoken für Azure konnte nicht abgerufen werden. Stellen Sie sicher, dass der verwendete Dienstprinzipal gültig und nicht abgelaufen ist.",
+ "loc.messages.CorrelationIdForARM": "Korrelations-ID aus ARM-API-Aufrufantwort: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s ist für diesen Agent nicht vorinstalliert.",
+ "loc.messages.UsePreinstalledJava": "Vorinstalliertes JDK aus \"%s\" verwenden",
+ "loc.messages.WrongArchiveStructure": "Die JDK-Datei ist ungültig. Stellen Sie sicher, dass die JDK-Datei nur einen Stammordner mit \"bin\" enthält.",
+ "loc.messages.WrongArchiveFile": "Die Archivdatei ist falsch. Es ist kein Ordner vorhanden, der JDK enthält.",
+ "loc.messages.ShareAccessError": "Freigegebene Netzwerkressource nicht verfügbar: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "Die JDK-Datei wird nicht unterstützt. Stellen Sie sicher, dass die JDK-Datei genau einen Ordner enthält.",
+ "loc.messages.NoPKGFile": "Die PKG-Datei wurde nicht gefunden.",
+ "loc.messages.SeveralPKGFiles": "Es wurden mehrere PKG-Dateien gefunden.",
+ "loc.messages.InstallJDK": "JDK wird installiert.",
+ "loc.messages.AttachDiskImage": "Ein Datenträgerimage wird angefügt.",
+ "loc.messages.DetachDiskImage": "Ein Datenträgerimage wird getrennt.",
+ "loc.messages.PkgPathDoesNotExist": "Der Paketpfad ist nicht vorhanden.",
+ "loc.messages.PreInstalledJavaUpgraded": "Das vorinstallierte JDK wurde aktualisiert.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java wurde erfolgreich installiert.",
+ "loc.messages.ArchiveWasExtractedEarlier": "Das Archiv mit JDK wurde bereits extrahiert – das Extrahieren wird übersprungen.",
+ "loc.messages.ExtractingArchiveToPath": "Archiv wird extrahiert in: %s",
+ "loc.messages.ErrorCleaningFolder": "Fehler beim Bereinigen des Ordners: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/en-US/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..f793bffd2f89
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Java tool installer",
+ "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=875287) or [see the Java documentation](https://docs.oracle.com/java/)",
+ "loc.description": "Acquire a specific version of Java from a user-supplied Azure blob or the tool cache and sets JAVA_HOME",
+ "loc.instanceNameFormat": "Use Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Download Java from an Azure blob",
+ "loc.input.label.versionSpec": "JDK version",
+ "loc.input.help.versionSpec": "A number that specifies the JDK version to make available on the path. Use a whole number version, such as 10",
+ "loc.input.label.jdkArchitectureOption": "JDK architecture",
+ "loc.input.help.jdkArchitectureOption": "The architecture (x86, x64) of the JDK.",
+ "loc.input.label.jdkSourceOption": "JDK source",
+ "loc.input.help.jdkSourceOption": "Source for the compressed JDK.",
+ "loc.input.label.jdkFile": "JDK file",
+ "loc.input.help.jdkFile": "Path to where the compressed JDK is located. The path could be in your source repository or a local path on the agent.",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure subscription",
+ "loc.input.help.azureResourceManagerEndpoint": "Choose the Azure Resource Manager subscription for the JDK.",
+ "loc.input.label.azureStorageAccountName": "Storage account name",
+ "loc.input.help.azureStorageAccountName": "Azure Classic and Resource Manager storage accounts are listed. Select the storage account name in which the JDK is located.",
+ "loc.input.label.azureContainerName": "Container name",
+ "loc.input.help.azureContainerName": "Name of the container in the storage account in which the JDK is located.",
+ "loc.input.label.azureCommonVirtualFile": "Common virtual path",
+ "loc.input.help.azureCommonVirtualFile": "Path to the JDK inside the Azure storage container.",
+ "loc.input.label.jdkDestinationDirectory": "Destination directory",
+ "loc.input.help.jdkDestinationDirectory": "On Linux and Windows, this is used as the destination directory for JDK installation. On macOS, this directory is used as a temporary folder for extracting of .dmg's since macOS doesn't support installing of JDK to specific directory.",
+ "loc.input.label.azureResourceGroupName": "Resource Group name",
+ "loc.input.help.azureResourceGroupName": "Resource Group name of the storage account.",
+ "loc.input.label.cleanDestinationDirectory": "Clean destination directory",
+ "loc.input.help.cleanDestinationDirectory": "Select this option to clean the destination directory before JDK is extracted into it.",
+ "loc.input.label.createExtractDirectory": "Create directory for extracting",
+ "loc.input.help.createExtractDirectory": "By default, task is creating a directory similar to this JAVA_HOME_8_X64_OpenJDK_zip for extracting JDK. This option allows to disable creation of this folder, in this case, JDK will be located in the root of jdkDestinationDirectory",
+ "loc.messages.DownloadFromAzureBlobStorage": "Downloading artifacts from Azure blob storage, Container Name: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "Successfully fetched list of items",
+ "loc.messages.StorageAccountDoesNotExist": "Failed to get azure storage account with name %s.",
+ "loc.messages.RequestedUrlTooLong": "Requested URL is too long, this usually happen when you have a lot of Resource Groups in the subscription, try to set azureResourceGroupName input.",
+ "loc.messages.UnzipExtractFile": "Extracting file: %s",
+ "loc.messages.SevenZipExtractFile": "Extracting file: %s",
+ "loc.messages.TarExtractFile": "Extracting file: %s",
+ "loc.messages.ExtractFileFailedMsg": "Extraction failed for file: %s \ncode: %d \nstdout: %s \nstderr: %s \nerror: %s;",
+ "loc.messages.ExtractNonExistFile": "Extraction failed for file: %s because it does not exist.",
+ "loc.messages.ExtractDirFailed": "Extraction failed for file: %s because it is a directory.",
+ "loc.messages.CreateTempDir": "Creating temp folder: %s to decompress: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Decompressed temporary tar from: %s to: %s",
+ "loc.messages.RemoveTempDir": "Removing temp folder: %s",
+ "loc.messages.ExtractFailedCannotCreate": "Extraction failed for file: %s because temporary location could not be created: %s",
+ "loc.messages.CleanDestDir": "Cleaning destination folder before extraction: %s",
+ "loc.messages.CreateDestDir": "Creating destination folder: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Retrieving the JDK from Azure blob storage.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Retrieving the JDK from local path.",
+ "loc.messages.SucceedMsg": "Successfully extracted all files.",
+ "loc.messages.SetJavaHome": "JAVA_HOME is being set to: %s",
+ "loc.messages.SetExtendedJavaHome": "%s is being set to: %s",
+ "loc.messages.UnsupportedFileExtension": "Specified JDK source file does not have a supported file extension.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Could not fetch access token for Azure. Status code: %s, status message: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not fetch access token for Managed Service Principal. Please configure Managed Service Identity (MSI) for virtual machine 'https://aka.ms/azure-msi-docs'. Status code: %s, status message: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Could not fetch access token for Managed Service Principal. Status code: %s, status message: %s",
+ "loc.messages.ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.",
+ "loc.messages.CorrelationIdForARM": "Correlation ID from ARM api call response : %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s is not preinstalled on this agent",
+ "loc.messages.UsePreinstalledJava": "Use preinstalled JDK from %s",
+ "loc.messages.WrongArchiveStructure": "JDK file is not valid. Verify if JDK file contains only one root folder with 'bin' inside.",
+ "loc.messages.WrongArchiveFile": "Archive file is wrong. There is not any folder which contains JDK",
+ "loc.messages.ShareAccessError": "Network shared resource not available: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "JDK file is not supported. Verify if JDK file contains exactly one folder inside.",
+ "loc.messages.NoPKGFile": "Could not find PKG file.",
+ "loc.messages.SeveralPKGFiles": "Found more than one PKG files.",
+ "loc.messages.InstallJDK": "Installing JDK.",
+ "loc.messages.AttachDiskImage": "Attaching a disk image.",
+ "loc.messages.DetachDiskImage": "Detaching a disk image.",
+ "loc.messages.PkgPathDoesNotExist": "Package path does not exist.",
+ "loc.messages.PreInstalledJavaUpgraded": "Preinstalled JDK updated.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java has been successfully installed",
+ "loc.messages.ArchiveWasExtractedEarlier": "Archive with JDK was extracted earlier - skipping extracting",
+ "loc.messages.ExtractingArchiveToPath": "Extracting archive to: %s",
+ "loc.messages.ErrorCleaningFolder": "Folder cleaning error: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/es-ES/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..13e082bc152b
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Instalador de herramientas de Java",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=875287) o [consultar la documentación de Java](https://docs.oracle.com/java/)",
+ "loc.description": "Adquiere una versión específica de Java de un blob de Azure proporcionado por el usuario o la memoria caché de herramientas y establece JAVA_HOME.",
+ "loc.instanceNameFormat": "Usar Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Descargar Java desde un blob de Azure",
+ "loc.input.label.versionSpec": "Versión de JDK",
+ "loc.input.help.versionSpec": "Número que especifica la versión de JDK que estará disponible en la ruta de acceso. Use un número entero para la versión; por ejemplo, 10.",
+ "loc.input.label.jdkArchitectureOption": "Arquitectura JDK",
+ "loc.input.help.jdkArchitectureOption": "La arquitectura (x86, x64) de JDK.",
+ "loc.input.label.jdkSourceOption": "Origen de JDK",
+ "loc.input.help.jdkSourceOption": "Origen de JDK comprimido.",
+ "loc.input.label.jdkFile": "Archivo JDK",
+ "loc.input.help.jdkFile": "Ruta de acceso a la ubicación de JDK comprimido. Dicha ruta puede estar en el repositorio de origen o ser una ruta de acceso local en el agente.",
+ "loc.input.label.azureResourceManagerEndpoint": "Suscripción de Azure",
+ "loc.input.help.azureResourceManagerEndpoint": "Elija la suscripción de Azure Resource Manager para JDK.",
+ "loc.input.label.azureStorageAccountName": "Nombre de cuenta de Storage",
+ "loc.input.help.azureStorageAccountName": "Se muestran las cuentas de almacenamiento de Azure clásico y de Resource Manager. Seleccione el nombre de la cuenta de almacenamiento en la que se encuentra JDK.",
+ "loc.input.label.azureContainerName": "Nombre del contenedor",
+ "loc.input.help.azureContainerName": "Nombre del contenedor de la cuenta de almacenamiento donde se encuentra el JDK.",
+ "loc.input.label.azureCommonVirtualFile": "Ruta de acceso virtual común",
+ "loc.input.help.azureCommonVirtualFile": "Ruta de acceso al JDK dentro del contenedor de almacenamiento de Azure.",
+ "loc.input.label.jdkDestinationDirectory": "Directorio de destino",
+ "loc.input.help.jdkDestinationDirectory": "En Linux y Windows, se usa como directorio de destino para la instalación de JDK. En macOS, este directorio se usa como carpeta temporal para la extracción de archivos .dmg, ya que macOS no admite la instalación de JDK en el directorio específico.",
+ "loc.input.label.azureResourceGroupName": "Nombre del grupo de recursos",
+ "loc.input.help.azureResourceGroupName": "Nombre del grupo de recursos de la cuenta de almacenamiento.",
+ "loc.input.label.cleanDestinationDirectory": "Limpiar directorio de destino",
+ "loc.input.help.cleanDestinationDirectory": "Seleccione esta opción para limpiar el directorio de destino antes de extraer JDK en este.",
+ "loc.input.label.createExtractDirectory": "Crear directorio para la extracción",
+ "loc.input.help.createExtractDirectory": "De forma predeterminada, la tarea está creando un directorio similar a este JAVA_HOME_8_X64_OpenJDK_zip para extraer JDK. Esta opción permite deshabilitar la creación de esta carpeta. Si se deshabilita, el JDK se ubicará en la raíz de jdkDestinationDirectory",
+ "loc.messages.DownloadFromAzureBlobStorage": "Descargando artefactos de Azure Blob Storage. Nombre del contenedor: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "La lista de elementos se recuperó correctamente.",
+ "loc.messages.StorageAccountDoesNotExist": "No se pudo obtener la cuenta de Azure Storage con el nombre %s.",
+ "loc.messages.RequestedUrlTooLong": "La dirección URL solicitada es demasiado larga. Esto suele ocurrir cuando hay muchos grupos de recursos en la suscripción. Intente establecer la entrada azureResourceGroupName.",
+ "loc.messages.UnzipExtractFile": "Extrayendo archivo: %s",
+ "loc.messages.SevenZipExtractFile": "Extrayendo archivo: %s",
+ "loc.messages.TarExtractFile": "Extrayendo archivo: %s",
+ "loc.messages.ExtractFileFailedMsg": "Error al extraer el archivo: %s \nCódigo: %d \nStdOut: %s \nStdErr: %s \nError: %s;",
+ "loc.messages.ExtractNonExistFile": "Error al extraer el archivo: %s porque no existe.",
+ "loc.messages.ExtractDirFailed": "Error al extraer el archivo: %s porque es un directorio.",
+ "loc.messages.CreateTempDir": "Creando la carpeta temporal: %s para descomprimir: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Archivo tar temporal descomprimido de: %s a: %s",
+ "loc.messages.RemoveTempDir": "Quitando la carpeta temporal: %s",
+ "loc.messages.ExtractFailedCannotCreate": "Error al extraer el archivo: %s porque no se pudo crear la ubicación temporal: %s",
+ "loc.messages.CleanDestDir": "Limpiando la carpeta de destino antes de la extracción: %s",
+ "loc.messages.CreateDestDir": "Creando la carpeta de destino: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Recuperando el JDK de Azure Blob Storage.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Recuperando el JDK de la ruta de acceso local.",
+ "loc.messages.SucceedMsg": "Todos los archivos se extrajeron correctamente.",
+ "loc.messages.SetJavaHome": "JAVA_HOME se está estableciendo en: %s",
+ "loc.messages.SetExtendedJavaHome": "%s se está estableciendo en: %s",
+ "loc.messages.UnsupportedFileExtension": "El archivo de origen de JDK que se ha especificado no tiene una extensión de archivo compatible.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "No se pudo capturar el token de acceso para Azure. Código de estado: %s. Mensaje de estado: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "No se pudo capturar el token de acceso para la entidad de servicio administrada. Configure Managed Service Identity (MSI) para la máquina virtual \"https://aka.ms/azure-msi-docs\". Código de estado: %s. Mensaje de estado: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "No se pudo capturar el token de acceso para la entidad de servicio administrada. Código de estado: %s. Mensaje de estado: %s",
+ "loc.messages.ExpiredServicePrincipal": "No se pudo capturar el token de acceso de Azure. Compruebe que la entidad de servicio usada es válida y no ha expirado.",
+ "loc.messages.CorrelationIdForARM": "Identificador de correlación de la respuesta de llamada API de ARM: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s no está preinstalado en este agente.",
+ "loc.messages.UsePreinstalledJava": "Usar JDK preinstalado desde %s",
+ "loc.messages.WrongArchiveStructure": "El archivo JDK no es válido. Compruebe si dicho archivo contiene solo una carpeta raíz con \"bin\" incluido.",
+ "loc.messages.WrongArchiveFile": "El archivo de almacenamiento es incorrecto. No hay ninguna carpeta que contenga JDK",
+ "loc.messages.ShareAccessError": "Recurso compartido de red no disponible: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "No se admite el archivo JDK. Compruebe si dicho archivo contiene una carpeta exactamente.",
+ "loc.messages.NoPKGFile": "No se encontró el archivo .pkg.",
+ "loc.messages.SeveralPKGFiles": "Se encontró más de un archivo .pkg.",
+ "loc.messages.InstallJDK": "Instalando JDK.",
+ "loc.messages.AttachDiskImage": "Asociando una imagen de disco.",
+ "loc.messages.DetachDiskImage": "Desasociando una imagen de disco.",
+ "loc.messages.PkgPathDoesNotExist": "La ruta de acceso del paquete no existe.",
+ "loc.messages.PreInstalledJavaUpgraded": "Se ha actualizado el JDK preinstalado.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java se ha instalado correctamente.",
+ "loc.messages.ArchiveWasExtractedEarlier": "El archivo con JDK se extrajo anteriormente; se omite la extracción.",
+ "loc.messages.ExtractingArchiveToPath": "Extrayendo el archivo de almacenamiento a %s",
+ "loc.messages.ErrorCleaningFolder": "Error de limpieza de la carpeta: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..26d9cce698e7
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Programme d'installation de l'outil Java",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=875287) ou [consulter la documentation de Java](https://docs.oracle.com/java/)",
+ "loc.description": "Acquérir une version spécifique de Java à partir d'un blob Azure fourni par l'utilisateur ou à partir du cache d'outils, puis définir JAVA_HOME",
+ "loc.instanceNameFormat": "Utiliser Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Télécharger Java à partir d'un blob Azure",
+ "loc.input.label.versionSpec": "Version du kit JDK",
+ "loc.input.help.versionSpec": "Numéro de version du kit JDK disponible dans le chemin. Utilisez un nombre entier pour la version, par exemple 10",
+ "loc.input.label.jdkArchitectureOption": "Architecture du kit JDK",
+ "loc.input.help.jdkArchitectureOption": "Architecture (x86, x64) du kit JDK.",
+ "loc.input.label.jdkSourceOption": "Source du kit JDK",
+ "loc.input.help.jdkSourceOption": "Source du kit JDK compressé.",
+ "loc.input.label.jdkFile": "Fichier du kit JDK",
+ "loc.input.help.jdkFile": "Chemin du kit JDK compressé. Le chemin peut correspondre à votre dépôt source ou à un chemin local sur l'agent.",
+ "loc.input.label.azureResourceManagerEndpoint": "Abonnement Azure",
+ "loc.input.help.azureResourceManagerEndpoint": "Choisissez l'abonnement Azure Resource Manager pour le kit JDK.",
+ "loc.input.label.azureStorageAccountName": "Nom du compte de stockage",
+ "loc.input.help.azureStorageAccountName": "Les comptes de stockage Azure Classic et Azure Resource Manager sont listés. Sélectionnez le nom du compte de stockage dans lequel se trouve le kit JDK.",
+ "loc.input.label.azureContainerName": "Nom du conteneur",
+ "loc.input.help.azureContainerName": "Nom du conteneur dans le compte de stockage où se trouve le kit JDK.",
+ "loc.input.label.azureCommonVirtualFile": "Chemin virtuel commun",
+ "loc.input.help.azureCommonVirtualFile": "Chemin du kit JDK présent dans le conteneur du stockage Azure.",
+ "loc.input.label.jdkDestinationDirectory": "Répertoire de destination",
+ "loc.input.help.jdkDestinationDirectory": "Sur Linux et Windows, il s'agit du répertoire de destination pour l'installation du kit JDK. Sur macOS, ce répertoire est utilisé en tant que dossier temporaire pour l'extraction des fichiers .dmg, car macOS ne prend pas en charge l'installation du kit JDK dans un répertoire spécifique.",
+ "loc.input.label.azureResourceGroupName": "Nom du groupe de ressources",
+ "loc.input.help.azureResourceGroupName": "Nom du groupe de ressources du compte de stockage.",
+ "loc.input.label.cleanDestinationDirectory": "Nettoyer le répertoire de destination",
+ "loc.input.help.cleanDestinationDirectory": "Sélectionnez cette option pour nettoyer le répertoire de destination avant d'y extraire le kit JDK.",
+ "loc.input.label.createExtractDirectory": "Créer un répertoire pour l’extraction",
+ "loc.input.help.createExtractDirectory": "Par défaut, la tâche crée un répertoire similaire à ce JAVA_HOME_8_X64_OpenJDK_zip pour extraire le JDK. Cette option permet de désactiver la création de ce dossier, dans ce cas, le JDK sera situé à la racine du répertoire jdkDestinationDirectory.",
+ "loc.messages.DownloadFromAzureBlobStorage": "Téléchargement d'artefacts à partir du Stockage Blob Azure. Nom du conteneur : %s",
+ "loc.messages.SuccessFullyFetchedItemList": "Récupération (fetch) réussie de la liste des éléments",
+ "loc.messages.StorageAccountDoesNotExist": "Échec de l'obtention du compte de stockage Azure nommé %s.",
+ "loc.messages.RequestedUrlTooLong": "L’URL demandée est trop longue. Cela se produit généralement lorsque vous avez beaucoup de groupes de ressources dans l’abonnement. Essayez de définir l’entrée azureResourceGroupName.",
+ "loc.messages.UnzipExtractFile": "Extraction du fichier : %s",
+ "loc.messages.SevenZipExtractFile": "Extraction du fichier : %s",
+ "loc.messages.TarExtractFile": "Extraction du fichier : %s",
+ "loc.messages.ExtractFileFailedMsg": "Échec de l'extraction pour le fichier %s \nCode : %d \nstdout : %s \nstderr : %s \nErreur : %s;",
+ "loc.messages.ExtractNonExistFile": "Échec de l'extraction du fichier %s , car il n'existe pas.",
+ "loc.messages.ExtractDirFailed": "Échec de l'extraction du fichier %s, car il s'agit d'un répertoire.",
+ "loc.messages.CreateTempDir": "Création du dossier temporaire %s à décompresser : %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Fichier temporaire .tar décompressé de %s à %s",
+ "loc.messages.RemoveTempDir": "Suppression du fichier temporaire : %s",
+ "loc.messages.ExtractFailedCannotCreate": "Échec de l'extraction du fichier %s, car l'emplacement temporaire n'a pas pu être créé : %s",
+ "loc.messages.CleanDestDir": "Nettoyage du dossier de destination avant l'extraction : %s",
+ "loc.messages.CreateDestDir": "Création du dossier de destination : %s",
+ "loc.messages.RetrievingJdkFromAzure": "Récupération du kit JDK à partir du Stockage Blob Azure.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Récupération du kit JDK à partir du chemin local.",
+ "loc.messages.SucceedMsg": "Extraction réussie de tous les fichiers.",
+ "loc.messages.SetJavaHome": "JAVA_HOME a la valeur %s",
+ "loc.messages.SetExtendedJavaHome": "%s a la valeur %s",
+ "loc.messages.UnsupportedFileExtension": "Le fichier source de kit JDK spécifié n'a pas d'extension de fichier prise en charge.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Impossible de récupérer (fetch) le jeton d'accès pour Azure. Code d'état : %s, message d'état : %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Impossible de récupérer (fetch) le jeton d'accès pour le principal du service managé. Configurez MSI (Managed Service Identity) pour la machine virtuelle 'https://aka.ms/azure-msi-docs'. Code d'état : %s, message d'état : %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Impossible de récupérer (fetch) le jeton d'accès pour le principal du service managé. Code d'état : %s, message d'état : %s",
+ "loc.messages.ExpiredServicePrincipal": "Impossible de récupérer (fetch) le jeton d'accès pour Azure. Vérifiez si le principal de service utilisé est valide et s'il n'a pas expiré.",
+ "loc.messages.CorrelationIdForARM": "ID de corrélation de la réponse à l'appel d'API ARM : %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s n'est pas préinstallé sur cet agent",
+ "loc.messages.UsePreinstalledJava": "Utiliser le kit JDK préinstallé à partir de %s",
+ "loc.messages.WrongArchiveStructure": "Le fichier JDK n'est pas valide. Vérifiez si le fichier JDK comporte bien un seul dossier racine contenant 'bin'.",
+ "loc.messages.WrongArchiveFile": "Le fichier d’archive est incorrect. Aucun dossier ne contient de JDK",
+ "loc.messages.ShareAccessError": "Ressource réseau partagée non disponible : (%s)",
+ "loc.messages.UnsupportedDMGStructure": "Le fichier JDK n'est pas pris en charge. Vérifiez si le fichier JDK contient bien un seul dossier.",
+ "loc.messages.NoPKGFile": "Le fichier PKG est introuvable.",
+ "loc.messages.SeveralPKGFiles": "Plusieurs fichiers PKG ont été trouvés.",
+ "loc.messages.InstallJDK": "Installation du kit JDK.",
+ "loc.messages.AttachDiskImage": "Attachement d'une image de disque.",
+ "loc.messages.DetachDiskImage": "Détachement d'une image de disque.",
+ "loc.messages.PkgPathDoesNotExist": "Le chemin du package n'existe pas.",
+ "loc.messages.PreInstalledJavaUpgraded": "Le kit JDK préinstallé a été mis à jour.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java a été correctement installé",
+ "loc.messages.ArchiveWasExtractedEarlier": "L'archive incluant le kit JDK a déjà été extraite. Extraction ignorée",
+ "loc.messages.ExtractingArchiveToPath": "Extraction de l'archive vers %s",
+ "loc.messages.ErrorCleaningFolder": "Erreur de nettoyage du dossier : %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/it-IT/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..16b7881ace1f
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Programma di installazione strumento Java",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=875287). In alternativa [vedere la documentazione di Java](https://docs.oracle.com/java/)",
+ "loc.description": "Acquisisce una versione specifica di Java da un BLOB di Azure specificato dall'utente o dalla cache degli strumenti e imposta JAVA_HOME",
+ "loc.instanceNameFormat": "Usa Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Scarica Java da un BLOB di Azure",
+ "loc.input.label.versionSpec": "Versione del JDK",
+ "loc.input.help.versionSpec": "Numero che specifica la versione del JDK da rendere disponibile nel percorso. Usare un numero di versione intero, ad esempio 10",
+ "loc.input.label.jdkArchitectureOption": "Architettura del JDK",
+ "loc.input.help.jdkArchitectureOption": "Architettura (x86, x64) del JDK.",
+ "loc.input.label.jdkSourceOption": "Origine del JDK",
+ "loc.input.help.jdkSourceOption": "Origine del JDK compresso.",
+ "loc.input.label.jdkFile": "File del JDK",
+ "loc.input.help.jdkFile": "Percorso in cui si trova il JDK compresso. Il percorso può trovarsi nel repository di origine o in un percorso locale nell'agente.",
+ "loc.input.label.azureResourceManagerEndpoint": "Sottoscrizione di Azure",
+ "loc.input.help.azureResourceManagerEndpoint": "Consente di scegliere la sottoscrizione di Azure Resource Manager per il JDK.",
+ "loc.input.label.azureStorageAccountName": "Nome account di archiviazione",
+ "loc.input.help.azureStorageAccountName": "Sono elencati gli account di archiviazione di Azure Classic e Resource Manager. Selezionare il nome dell'account di archiviazione in cui si trova il JDK.",
+ "loc.input.label.azureContainerName": "Nome contenitore",
+ "loc.input.help.azureContainerName": "Nome del contenitore nell'account di archiviazione in cui si trova il JDK.",
+ "loc.input.label.azureCommonVirtualFile": "Percorso virtuale comune",
+ "loc.input.help.azureCommonVirtualFile": "Percorso del JDK all'interno del contenitore di archiviazione di Azure.",
+ "loc.input.label.jdkDestinationDirectory": "Directory di destinazione",
+ "loc.input.help.jdkDestinationDirectory": "In Linux e Windows viene usata come directory di destinazione per l'installazione del JDK. In macOS questa directory viene usata come cartella temporanea per l'estrazione dei file con estensione dmg perché macOS non supporta l'installazione del JDK in una directory specifica.",
+ "loc.input.label.azureResourceGroupName": "Nome gruppo di risorse",
+ "loc.input.help.azureResourceGroupName": "Nome del gruppo di risorse dell'account di archiviazione.",
+ "loc.input.label.cleanDestinationDirectory": "Pulisci la directory di destinazione",
+ "loc.input.help.cleanDestinationDirectory": "Selezionare questa opzione per pulire la directory di destinazione prima di estrarvi il JDK.",
+ "loc.input.label.createExtractDirectory": "Crea directory per l'estrazione",
+ "loc.input.help.createExtractDirectory": "Per impostazione predefinita, l'attività crea una directory simile a JAVA_HOME_8_X64_OpenJDK_zip per l'estrazione del JDK. Questa opzione consente di disabilitare la creazione di questa cartella. In questo caso il JDK verrà salvato nella radice di jdkDestinationDirectory",
+ "loc.messages.DownloadFromAzureBlobStorage": "Download degli artefatti da Archiviazione BLOB di Azure. Nome del contenitore: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "L'elenco di elementi è stato recuperato",
+ "loc.messages.StorageAccountDoesNotExist": "Non è stato possibile recuperare l'account di archiviazione di Azure denominato %s.",
+ "loc.messages.RequestedUrlTooLong": "L'URL richiesto è troppo lungo. Questo problema si verifica in genere quando nella sottoscrizione sono presenti molti gruppi di risorse, si tenta di impostare l'input azureResourceGroupName.",
+ "loc.messages.UnzipExtractFile": "Estrazione del file: %s",
+ "loc.messages.SevenZipExtractFile": "Estrazione del file: %s",
+ "loc.messages.TarExtractFile": "Estrazione del file: %s",
+ "loc.messages.ExtractFileFailedMsg": "L'estrazione del file %s non è riuscita\nCodice: %d \nStdout: %s \nStderr: %s \nErrore: %s;",
+ "loc.messages.ExtractNonExistFile": "L'estrazione del file %s non è riuscita perché non esiste.",
+ "loc.messages.ExtractDirFailed": "L'estrazione del file %s non è riuscita perché è una directory.",
+ "loc.messages.CreateTempDir": "Creazione della cartella temporanea %s per la decompressione di %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Il file TAR temporaneo è stato decompresso da %s in %s",
+ "loc.messages.RemoveTempDir": "Rimozione della cartella temporanea: %s",
+ "loc.messages.ExtractFailedCannotCreate": "L'estrazione del file %s perché non è stato possibile trovare il percorso temporaneo: %s",
+ "loc.messages.CleanDestDir": "Pulizia della cartella di destinazione prima dell'estrazione: %s",
+ "loc.messages.CreateDestDir": "Creazione della cartella di destinazione: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Recupero del JDK da Archiviazione BLOB di Azure.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Recupero del JDK dal percorso locale.",
+ "loc.messages.SucceedMsg": "Sono stati estratti tutti i file.",
+ "loc.messages.SetJavaHome": "JAVA_HOME verrà impostato su: %s",
+ "loc.messages.SetExtendedJavaHome": "%s verrà impostato su: %s",
+ "loc.messages.UnsupportedFileExtension": "Per il file di origine del JDK specificato non esiste alcuna estensione di file supportata.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Non è stato possibile recuperare il token di accesso per Azure. Codice di stato: %s. Messaggio di stato: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Non è stato possibile recuperare il token di accesso per l'entità servizio gestita. Configurare l'identità del servizio gestita per la macchina virtuale 'https://aka.ms/azure-msi-docs'. Codice di stato: %s. Messaggio di stato: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Non è stato possibile recuperare il token di accesso per l'entità servizio gestita. Codice di stato: %s. Messaggio di stato: %s",
+ "loc.messages.ExpiredServicePrincipal": "Non è stato possibile recuperare il token di accesso per Azure. Verificare che l'entità servizio usata sia valida e non sia scaduta.",
+ "loc.messages.CorrelationIdForARM": "ID correlazione della risposta alla chiamata API ARM: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s non è preinstallato in questo agente",
+ "loc.messages.UsePreinstalledJava": "Usa il JDK preinstallato da %s",
+ "loc.messages.WrongArchiveStructure": "Il file JDK non è valido. Verificare se il file JDK contiene solo una cartella radice con 'bin'.",
+ "loc.messages.WrongArchiveFile": "Il file di archivio non è corretto. Non esiste alcuna cartella contenente JDK",
+ "loc.messages.ShareAccessError": "Risorsa condivisa di rete non disponibile: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "Il file JDK non è supportato. Verificare se il file JDK contiene esattamente una cartella.",
+ "loc.messages.NoPKGFile": "Non è stato possibile trovare il file PKG.",
+ "loc.messages.SeveralPKGFiles": "Sono stati trovati più file PKG.",
+ "loc.messages.InstallJDK": "Installazione del JDK.",
+ "loc.messages.AttachDiskImage": "Collegamento a un'immagine del disco.",
+ "loc.messages.DetachDiskImage": "Rimozione di un'immagine del disco.",
+ "loc.messages.PkgPathDoesNotExist": "Il percorso del pacchetto non esiste.",
+ "loc.messages.PreInstalledJavaUpgraded": "Il JDK preinstallato è stato aggiornato.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java è stato installato",
+ "loc.messages.ArchiveWasExtractedEarlier": "L'archivio con JDK è stato estratto in precedenza. L'estrazione verrà ignorata",
+ "loc.messages.ExtractingArchiveToPath": "Estrazione dell'archivio in: %s",
+ "loc.messages.ErrorCleaningFolder": "Errore di pulizia della cartella: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..7ddbca1bb3f2
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Java ツール インストーラー",
+ "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=875287)、または [Java のドキュメントを参照](https://docs.oracle.com/java/)",
+ "loc.description": "ユーザーが指定する Azure Blob またはツール キャッシュから Java の特定のバージョンを取得し、JAVA_HOME を設定します",
+ "loc.instanceNameFormat": "Java $(versionSpec) の使用",
+ "loc.group.displayName.JavaInAzureGroup": "Azure BLOB からの Java のダウンロード",
+ "loc.input.label.versionSpec": "JDK バージョン",
+ "loc.input.help.versionSpec": "パス上で使用可能にする JDK バージョンを指定する数値。10 などの整数のバージョンを使用します",
+ "loc.input.label.jdkArchitectureOption": "JDK アーキテクチャ",
+ "loc.input.help.jdkArchitectureOption": "JDK のアーキテクチャ (x86、x64)。",
+ "loc.input.label.jdkSourceOption": "JDK ソース",
+ "loc.input.help.jdkSourceOption": "圧縮された JDK のソース。",
+ "loc.input.label.jdkFile": "JDK ファイル",
+ "loc.input.help.jdkFile": "圧縮された JDK が存在する場所へのパス。パスは、ソース リポジトリ、またはエージェント上のローカル パスの可能性があります。",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure サブスクリプション",
+ "loc.input.help.azureResourceManagerEndpoint": "JDK 用の Azure Resource Manager サブスクリプションを選択します。",
+ "loc.input.label.azureStorageAccountName": "ストレージ アカウント名",
+ "loc.input.help.azureStorageAccountName": "Azure クラシックと Resoure Manager のストレージ アカウントの一覧を示します。JDK があるストレージ アカウント名を選択します。",
+ "loc.input.label.azureContainerName": "コンテナー名",
+ "loc.input.help.azureContainerName": "JDK が存在するストレージ アカウントのコンテナー名です。",
+ "loc.input.label.azureCommonVirtualFile": "共通仮想パス",
+ "loc.input.help.azureCommonVirtualFile": "Azure ストレージ コンテナー内の JDK へのパス。",
+ "loc.input.label.jdkDestinationDirectory": "宛先ディレクトリ",
+ "loc.input.help.jdkDestinationDirectory": "Linux および Windows では、これは JDK のインストール先ディレクトリとして使用されます。macOSでは、JDK を特定のディレクトリにインストールすることはサポートされていないため、このディレクトリは .dmg を抽出する際の一時フォルダーとして使用されます。",
+ "loc.input.label.azureResourceGroupName": "リソース グループ名",
+ "loc.input.help.azureResourceGroupName": "ストレージ アカウントのリソース グループ名。",
+ "loc.input.label.cleanDestinationDirectory": "宛先ディレクトリの消去",
+ "loc.input.help.cleanDestinationDirectory": "JDK を抽出する前に宛先ディレクトリを空にする場合、このオプションを選択します。",
+ "loc.input.label.createExtractDirectory": "抽出するためのディレクトリを作成",
+ "loc.input.help.createExtractDirectory": "既定では、JDK を抽出するために、タスクはこの JAVA_HOME_8_X64_OpenJDK_zip に類似したディレクトリを作成しています。このオプションを使用すると、このフォルダーの作成を無効にすることができます。この場合、JDK は jdkDestinationDirectory のルートに配置されます",
+ "loc.messages.DownloadFromAzureBlobStorage": "Azure Blob Storage から成果物をダウンロードしています。コンテナー名: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "項目の一覧が正常にフェッチされました",
+ "loc.messages.StorageAccountDoesNotExist": "名前 %s の Azure ストレージ アカウントを取得できませんでした。",
+ "loc.messages.RequestedUrlTooLong": "要求の URL が長すぎます。多くの場合、この問題はサブスクリプションに多数のリソース グループがあるときに発生します。azureResourceGroupName の入力を設定してみてください。",
+ "loc.messages.UnzipExtractFile": "次のファイルを抽出しています: %s",
+ "loc.messages.SevenZipExtractFile": "次のファイルを抽出しています: %s",
+ "loc.messages.TarExtractFile": "次のファイルを抽出しています: %s",
+ "loc.messages.ExtractFileFailedMsg": "次のファイルを抽出できませんでした: %s \ncode: %d \nstdout: %s \nstderr: %s \nerror: %s;",
+ "loc.messages.ExtractNonExistFile": "ファイル %s がないので抽出できませんでした。",
+ "loc.messages.ExtractDirFailed": "ファイル: %s はディレクトリなので抽出できませんでした。",
+ "loc.messages.CreateTempDir": "展開するための一時フォルダー %s を作成しています: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "一時 tar を %s から %s に展開しました",
+ "loc.messages.RemoveTempDir": "一時フォルダーを削除しています: %s",
+ "loc.messages.ExtractFailedCannotCreate": "一時保存場所を作成できなかったので、ファイル %s を抽出できませんでした: %s",
+ "loc.messages.CleanDestDir": "抽出前に宛先フォルダーをクリーニングしています: %s",
+ "loc.messages.CreateDestDir": "宛先フォルダーを作成しています: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Azure Blob Storage から JDK を取得しています。",
+ "loc.messages.RetrievingJdkFromLocalPath": "ローカル パスから JDK を取得しています。",
+ "loc.messages.SucceedMsg": "すべてのファイルが正常に抽出されました。",
+ "loc.messages.SetJavaHome": "JAVA_HOME を %s に設定しています",
+ "loc.messages.SetExtendedJavaHome": "%s を %s に設定しています",
+ "loc.messages.UnsupportedFileExtension": "指定した JDK ソース ファイルには、サポートされているファイル拡張子がありません。",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Azure 用のアクセス トークンをフェッチできませんでした。状態コード: %s、状態メッセージ: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "マネージド サービス プリンシパルのアクセス トークンをフェッチできませんでした。仮想マシンのマネージド サービス ID (MSI) を構成してください 'https://aka.ms/azure-msi-docs'。状態コード: %s、ステータス メッセージ: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "マネージド サービス プリンシパルのアクセス トークンをフェッチできませんでした。状態コード: %s、ステータス メッセージ: %s",
+ "loc.messages.ExpiredServicePrincipal": "Azure のアクセス トークンをフェッチできませんでした。使用されているサービス プリンシパルが有効であり、有効期限が切れていないことを確認してください。",
+ "loc.messages.CorrelationIdForARM": "ARM API 呼び出しの応答からの関連付け ID: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s はこのエージェントにプレインストールされていません",
+ "loc.messages.UsePreinstalledJava": "%s からプレインストールされた JDK を使用します",
+ "loc.messages.WrongArchiveStructure": "JDK ファイルが有効ではありません。JDK ファイルに 'bin' が含まれるルート フォルダーが 1 つだけ含まれているかどうかを確認してください。",
+ "loc.messages.WrongArchiveFile": "アーカイブ ファイルが正しくありません。JDK を含むフォルダーがありません",
+ "loc.messages.ShareAccessError": "ネットワーク共有リソースを使用できません: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "JDK ファイルはサポートされていません。JDK ファイルにフォルダーが 1 つだけ含まれているかどうかを確認してください。",
+ "loc.messages.NoPKGFile": "PKG ファイルが見つかりませんでした。",
+ "loc.messages.SeveralPKGFiles": "複数の PKG ファイルが見つかりました。",
+ "loc.messages.InstallJDK": "JDK をインストールしています。",
+ "loc.messages.AttachDiskImage": "ディスク イメージをアタッチしています。",
+ "loc.messages.DetachDiskImage": "ディスク イメージをデタッチしています。",
+ "loc.messages.PkgPathDoesNotExist": "パッケージ パスが存在しません。",
+ "loc.messages.PreInstalledJavaUpgraded": "プレインストール済みの JDK が更新されました。",
+ "loc.messages.JavaSuccessfullyInstalled": "Java は正常にインストールされました",
+ "loc.messages.ArchiveWasExtractedEarlier": "JDK が入ったアーカイブは以前に展開されました - 展開をスキップします",
+ "loc.messages.ExtractingArchiveToPath": "アーカイブの展開先: %s",
+ "loc.messages.ErrorCleaningFolder": "フォルダーのクリーンアップ エラー: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..2e11dea06c34
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Java 도구 설치 관리자",
+ "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=875287) 또는 [Java 설명서 참조](https://docs.oracle.com/java/)",
+ "loc.description": "사용자 제공 Azure Blob 또는 도구 캐시에서 특정 버전의 Java를 가져오고 JAVA_HOME을 설정합니다.",
+ "loc.instanceNameFormat": "Java $(versionSpec) 사용",
+ "loc.group.displayName.JavaInAzureGroup": "Azure Blob에서 Java 다운로드",
+ "loc.input.label.versionSpec": "JDK 버전",
+ "loc.input.help.versionSpec": "경로에서 사용할 수 있는 JDK 버전을 지정하는 숫자입니다. 10 등의 정수 버전을 사용합니다.",
+ "loc.input.label.jdkArchitectureOption": "JDK 아키텍처",
+ "loc.input.help.jdkArchitectureOption": "JDK의 아키텍처(x86, x64)입니다.",
+ "loc.input.label.jdkSourceOption": "JDK 소스",
+ "loc.input.help.jdkSourceOption": "압축된 JDK의 소스입니다.",
+ "loc.input.label.jdkFile": "JDK 파일",
+ "loc.input.help.jdkFile": "압축된 JDK가 있는 위치의 경로입니다. 이 경로는 소스 리포지토리나 에이전트의 로컬 경로에 있을 수 있습니다.",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure 구독",
+ "loc.input.help.azureResourceManagerEndpoint": "JDK에 대한 Azure Resource Manager 구독을 선택합니다.",
+ "loc.input.label.azureStorageAccountName": "저장소 계정 이름",
+ "loc.input.help.azureStorageAccountName": "Azure Classic 및 Resource Manager 저장소 계정이 나열됩니다. JDK가 있는 저장소 계정 이름을 선택합니다.",
+ "loc.input.label.azureContainerName": "컨테이너 이름",
+ "loc.input.help.azureContainerName": "JDK가 있는 저장소 계정에 있는 컨테이너 이름입니다.",
+ "loc.input.label.azureCommonVirtualFile": "공통 가상 경로",
+ "loc.input.help.azureCommonVirtualFile": "Azure Storage 컨테이너 내에 있는 JDK의 경로입니다.",
+ "loc.input.label.jdkDestinationDirectory": "대상 디렉터리",
+ "loc.input.help.jdkDestinationDirectory": "Linux 및 Windows에서 이 항목은 JDK 설치를위한 대상 디렉터리로 사용됩니다. macOS에서는 macOS가 특정 디렉터리에 JDK 설치를 지원하지 않으므로 이 디렉터리는 .dmg를 추출하기 위한 임시 폴더로 사용됩니다.",
+ "loc.input.label.azureResourceGroupName": "리소스 그룹 이름",
+ "loc.input.help.azureResourceGroupName": "스토리지 계정의 리소스 그룹 이름입니다.",
+ "loc.input.label.cleanDestinationDirectory": "대상 디렉터리 정리",
+ "loc.input.help.cleanDestinationDirectory": "JDK를 대상 디렉터리에 추출하기 전에 대상 디렉터리를 정리하려면 이 옵션을 선택합니다.",
+ "loc.input.label.createExtractDirectory": "추출할 디렉터리 만들기",
+ "loc.input.help.createExtractDirectory": "기본적으로 작업은 JDK를 추출하기 위해 이 JAVA_HOME_8_X64_OpenJDK_zip과 유사한 디렉터리를 작성합니다. 이 옵션을 사용하면 이 폴더 생성을 비활성화할 수 있습니다. 이 경우 JDK는 jdkDestinationDirectory의 루트에 있습니다.",
+ "loc.messages.DownloadFromAzureBlobStorage": "Azure Blob Storage에서 아티팩트를 다운로드하는 중입니다. 컨네이너 이름: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "항목 목록을 가져왔습니다.",
+ "loc.messages.StorageAccountDoesNotExist": "이름이 %s인 Azure Storage 계정을 가져오지 못했습니다.",
+ "loc.messages.RequestedUrlTooLong": "요청된 URL이 너무 깁니다. 일반적으로 구독에 많은 리소스 그룹이 있을 때 발생합니다. azureResourceGroupName 입력을 설정해 보세요.",
+ "loc.messages.UnzipExtractFile": "파일 압축을 푸는 중: %s",
+ "loc.messages.SevenZipExtractFile": "파일 압축을 푸는 중: %s",
+ "loc.messages.TarExtractFile": "파일 압축을 푸는 중: %s",
+ "loc.messages.ExtractFileFailedMsg": "%s 파일을 압축하지 못했습니다. \n코드: %d \nstdout: %s \nstderr: %s \n오류: %s;",
+ "loc.messages.ExtractNonExistFile": "%s 파일은 없으므로 압축하지 못했습니다.",
+ "loc.messages.ExtractDirFailed": "%s 파일은 디렉터리이므로 압축을 풀지 못했습니다.",
+ "loc.messages.CreateTempDir": "압축을 풀 임시 폴더 %s을(를) 만드는 중입니다. %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "%s에 있는 임시 tar 파일의 압축을 %s(으)로 풀었습니다.",
+ "loc.messages.RemoveTempDir": "임시 폴더를 제거하는 중입니다. %s",
+ "loc.messages.ExtractFailedCannotCreate": "임시 위치를 만들 수 없으므로 %s 파일을 압축하지 못했습니다. %s",
+ "loc.messages.CleanDestDir": "압축 전에 대상 폴더를 지우는 중입니다. %s",
+ "loc.messages.CreateDestDir": "대상 폴더를 지우는 중입니다. %s",
+ "loc.messages.RetrievingJdkFromAzure": "Azure Blob Storage에서 JDK를 검색하는 중입니다.",
+ "loc.messages.RetrievingJdkFromLocalPath": "로컬 경로에서 JDK를 검색하는 중입니다.",
+ "loc.messages.SucceedMsg": "모든 파일을 압축했습니다.",
+ "loc.messages.SetJavaHome": "JAVA_HOME이 %s(으)로 설정됩니다.",
+ "loc.messages.SetExtendedJavaHome": "%s이(가) %s(으)로 설정됩니다.",
+ "loc.messages.UnsupportedFileExtension": "지정한 JDK 소스 파일의 파일 확장명이 지원되지 않습니다.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Azure에 대한 액세스 토큰을 페치할 수 없습니다. 상태 코드: %s, 상태 메시지: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "관리 서비스 주체에 대한 액세스 토큰을 페치할 수 없습니다. 가상 머신에 대한 MSI(관리 서비스 ID)를 구성하세요('https://aka.ms/azure-msi-docs'). 상태 코드: %s, 상태 메시지: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "관리 서비스 주체에 대한 액세스 토큰을 페치할 수 없습니다. 상태 코드: %s, 상태 메시지: %s",
+ "loc.messages.ExpiredServicePrincipal": "Azure의 액세스 토큰을 페치할 수 없습니다. 사용한 서비스 주체가 유효하고 만료되지 않았는지 확인하세요.",
+ "loc.messages.CorrelationIdForARM": "ARM API 호출 응답의 상관 관계 ID: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s이(가) 이 에이전트에 사전 설치되지 않음",
+ "loc.messages.UsePreinstalledJava": "%s에서 사전 설치된 JDK 사용",
+ "loc.messages.WrongArchiveStructure": "JDK 파일이 잘못되었습니다. JDK 파일 안에 'bin'이 포함된 루트 폴더가 하나만 포함되어 있는지 확인하세요.",
+ "loc.messages.WrongArchiveFile": "보관 파일이 잘못되었습니다. JDK를 포함하는 폴더가 없습니다.",
+ "loc.messages.ShareAccessError": "네트워크 공유 리소스를 사용할 수 없음: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "JDK 파일이 지원되지 않습니다. JDK 파일 안에 정확하게 폴더가 하나 포함되어 있는지 확인하세요.",
+ "loc.messages.NoPKGFile": "PKG 파일을 찾을 수 없습니다.",
+ "loc.messages.SeveralPKGFiles": "PKG 파일을 두 개 이상 찾았습니다.",
+ "loc.messages.InstallJDK": "JDK를 설치하는 중입니다.",
+ "loc.messages.AttachDiskImage": "디스크 이미지를 연결합니다.",
+ "loc.messages.DetachDiskImage": "디스크 이미지를 분리하는 중입니다.",
+ "loc.messages.PkgPathDoesNotExist": "패키지 경로가 없습니다.",
+ "loc.messages.PreInstalledJavaUpgraded": "사전 설치된 JDK를 업데이트했습니다.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java가 설치됨",
+ "loc.messages.ArchiveWasExtractedEarlier": "JDK를 사용한 보관 파일의 압축을 이전에 풀었습니다. 압축 풀기를 건너뜁니다.",
+ "loc.messages.ExtractingArchiveToPath": "%s에 보관 파일의 압축을 푸는 중",
+ "loc.messages.ErrorCleaningFolder": "폴더 정리 오류: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..cb469d9b97b5
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Установщик средств Java",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=875287) или [документацию по Java](https://docs.oracle.com/java/)",
+ "loc.description": "Получение определенной версии Java из предоставленного пользователем BLOB-объекта Azure или кэша инструментов и задание JAVA_HOME",
+ "loc.instanceNameFormat": "Использовать Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Скачать Java из BLOB-объекта Azure",
+ "loc.input.label.versionSpec": "Версия JDK",
+ "loc.input.help.versionSpec": "Число, определяющее версию JDK, которая должна быть доступна по пути. Используйте целочисленный номер версии, например 10",
+ "loc.input.label.jdkArchitectureOption": "Архитектура JDK",
+ "loc.input.help.jdkArchitectureOption": "Архитектура JDK (x86, x64).",
+ "loc.input.label.jdkSourceOption": "Источник JDK",
+ "loc.input.help.jdkSourceOption": "Источник сжатого пакета JDK.",
+ "loc.input.label.jdkFile": "Файл JDK",
+ "loc.input.help.jdkFile": "Путь к месту, где находится сжатый пакет JDK. Путь может указывать на расположение в исходном репозитории или являться локальным путем на компьютере агента.",
+ "loc.input.label.azureResourceManagerEndpoint": "Подписка Azure",
+ "loc.input.help.azureResourceManagerEndpoint": "Выберите подписку Azure Resource Manager для JDK.",
+ "loc.input.label.azureStorageAccountName": "Имя учетной записи хранения",
+ "loc.input.help.azureStorageAccountName": "В списке приведены классические учетные записи хранения Azure и учетные записи хранения Resource Manager. Выберите имя учетной записи, в которой находится JDK.",
+ "loc.input.label.azureContainerName": "Имя контейнера",
+ "loc.input.help.azureContainerName": "Имя контейнера в учетной записи хранения, в которой находится JDK.",
+ "loc.input.label.azureCommonVirtualFile": "Общий виртуальный путь",
+ "loc.input.help.azureCommonVirtualFile": "Путь к JDK в контейнере службы хранилища Azure.",
+ "loc.input.label.jdkDestinationDirectory": "Каталог назначения",
+ "loc.input.help.jdkDestinationDirectory": "В Linux и Windows этот каталог используется в качестве каталога назначения для установки JDK. В macOS этот каталог используется в качестве временной папки для извлечения DMG-файла, так как macOS не поддерживает установку JDK в определенный каталог.",
+ "loc.input.label.azureResourceGroupName": "Имя группы ресурсов",
+ "loc.input.help.azureResourceGroupName": "Имя группы ресурсов для учетной записи хранения.",
+ "loc.input.label.cleanDestinationDirectory": "Очистить каталог назначения",
+ "loc.input.help.cleanDestinationDirectory": "Выберите этот параметр, чтобы очистить каталог назначения перед извлечением в него пакета JDK.",
+ "loc.input.label.createExtractDirectory": "Создать каталог для извлечения",
+ "loc.input.help.createExtractDirectory": "По умолчанию задача создает каталог, сходный с JAVA_HOME_8_X64_OpenJDK_zip, для извлечения JDK. Этот параметр позволяет отключить создание данной папки. В таком случае JDK будет расположен в корне jdkDestinationDirectory",
+ "loc.messages.DownloadFromAzureBlobStorage": "Скачиваются артефакты из хранилища BLOB-объектов Azure; имя контейнера: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "Список элементов успешно получен.",
+ "loc.messages.StorageAccountDoesNotExist": "Не удалось получить учетную запись хранения Azure с именем %s.",
+ "loc.messages.RequestedUrlTooLong": "Запрошенный URL-адрес слишком длинный. Обычно это происходит, когда в подписке много групп ресурсов. Попробуйте задать входные данные azureResourceGroupName.",
+ "loc.messages.UnzipExtractFile": "Извлекается файл: %s",
+ "loc.messages.SevenZipExtractFile": "Извлекается файл: %s",
+ "loc.messages.TarExtractFile": "Извлекается файл: %s",
+ "loc.messages.ExtractFileFailedMsg": "Сбой извлечения файла: %s \ncode: %d \nstdout: %s \nstderr: %s \nerror: %s;",
+ "loc.messages.ExtractNonExistFile": "Произошел сбой извлечения файла: %s, так как он не существует.",
+ "loc.messages.ExtractDirFailed": "Произошел сбой извлечения файла: %s, так как он является каталогом.",
+ "loc.messages.CreateTempDir": "Создание временной папки: %s для распаковки: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Распакован временный TAR-файл из: %s в: %s",
+ "loc.messages.RemoveTempDir": "Удаление временной папки: %s",
+ "loc.messages.ExtractFailedCannotCreate": "Произошел сбой извлечения файла: %s, так как не удалось создать временное расположение: %s",
+ "loc.messages.CleanDestDir": "Очистка папки назначения перед извлечением: %s",
+ "loc.messages.CreateDestDir": "Создание папки назначения: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Пакет JDK извлекается из хранилища BLOB-объектов Azure.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Пакет JDK извлекается из локального пути.",
+ "loc.messages.SucceedMsg": "Все файлы успешно извлечены.",
+ "loc.messages.SetJavaHome": "Переменной JAVA_HOME присваивается значение: %s",
+ "loc.messages.SetExtendedJavaHome": "%s присваивается значение: %s",
+ "loc.messages.UnsupportedFileExtension": "Расширение указанного исходного файла JDK не поддерживается.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Не удалось получить маркер доступа для Azure. Код состояния: %s, сообщение о состоянии: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Настройте управляемое удостоверение службы (MSI) для виртуальной машины \"https://aka.ms/azure-msi-docs\". Код состояния: %s; сообщения о состоянии: %s.",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Код состояния: %s, сообщение о состоянии: %s.",
+ "loc.messages.ExpiredServicePrincipal": "Не удалось получить маркер доступа для Azure. Убедитесь, что используемый субъект-служба является допустимым, а срок его действия не истек.",
+ "loc.messages.CorrelationIdForARM": "Идентификатор корреляции из ответа на вызов API ARM: %s",
+ "loc.messages.JavaNotPreinstalled": "ПО Java %s не предустановлено на этом агенте.",
+ "loc.messages.UsePreinstalledJava": "Использовать предварительно установленное ПО JDK из %s.",
+ "loc.messages.WrongArchiveStructure": "Недопустимый файл JDK. Убедитесь, что файл JDK содержит только одну корневую папку с \"bin\".",
+ "loc.messages.WrongArchiveFile": "Неверный файл архива. Папки, содержащей JDK, не существует",
+ "loc.messages.ShareAccessError": "Общий сетевой ресурс недоступен: (%s).",
+ "loc.messages.UnsupportedDMGStructure": "Файл JDK не поддерживается. Убедитесь в том, что файл JDK содержит только одну папку.",
+ "loc.messages.NoPKGFile": "Не удалось найти файл PKG.",
+ "loc.messages.SeveralPKGFiles": "Обнаружено несколько файлов PKG.",
+ "loc.messages.InstallJDK": "Установка JDK.",
+ "loc.messages.AttachDiskImage": "Идет подключение образа диска.",
+ "loc.messages.DetachDiskImage": "Отключение образа диска.",
+ "loc.messages.PkgPathDoesNotExist": "Путь к пакету не существует.",
+ "loc.messages.PreInstalledJavaUpgraded": "Предварительно установленное ПО JDK обновлено.",
+ "loc.messages.JavaSuccessfullyInstalled": "ПО Java успешно установлено.",
+ "loc.messages.ArchiveWasExtractedEarlier": "Архив с JDK был извлечен ранее — пропуск извлечения.",
+ "loc.messages.ExtractingArchiveToPath": "Извлечение архива в каталог: %s",
+ "loc.messages.ErrorCleaningFolder": "Ошибка очистки папки: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..409daaa506c7
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Java 工具安装程序",
+ "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=875287)或[参阅 Java 文档](https://docs.oracle.com/java/)",
+ "loc.description": "从用户提供的 Azure blob 或工具缓存中获取特定版本的 Java,并设置 JAVA_HOME",
+ "loc.instanceNameFormat": "使用 Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "从 Azure blob 下载 Java",
+ "loc.input.label.versionSpec": "JDK 版本",
+ "loc.input.help.versionSpec": "指定要在路径上提供的 JDK 版本的数字。使用整数版本,例如 10",
+ "loc.input.label.jdkArchitectureOption": "JDK 体系结构",
+ "loc.input.help.jdkArchitectureOption": "JDK 的体系结构(x86、x64)。",
+ "loc.input.label.jdkSourceOption": "JDK 源",
+ "loc.input.help.jdkSourceOption": "压缩 JDK 的源。",
+ "loc.input.label.jdkFile": "JDK 文件",
+ "loc.input.help.jdkFile": "压缩 JDK 所在的路径。该路径可能在源资料库中或是代理上的本地路径。",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure 订阅",
+ "loc.input.help.azureResourceManagerEndpoint": "为 JDK 选择 Azure Resource Manager 订阅。",
+ "loc.input.label.azureStorageAccountName": "存储帐户名称",
+ "loc.input.help.azureStorageAccountName": "列出了 Azure Classic 和资源管理器存储帐户。选择 JDK 所在的存储帐户名。",
+ "loc.input.label.azureContainerName": "容器名",
+ "loc.input.help.azureContainerName": "JDK 所在存储帐户中的容器的名称。",
+ "loc.input.label.azureCommonVirtualFile": "常见虚拟路径",
+ "loc.input.help.azureCommonVirtualFile": "JDK 在 Azure 存储容器中的路径。",
+ "loc.input.label.jdkDestinationDirectory": "目标目录",
+ "loc.input.help.jdkDestinationDirectory": "在 Linux 和 Windows 上,它用作 JDK 安装的目标目录。在 macOS 上,此目录用作提取 .dmg 文件的临时文件夹,因为 macOS 不支持将 JDK 安装到特定目录。",
+ "loc.input.label.azureResourceGroupName": "资源组名称",
+ "loc.input.help.azureResourceGroupName": "存储帐户的资源组名称。",
+ "loc.input.label.cleanDestinationDirectory": "清除目标目录",
+ "loc.input.help.cleanDestinationDirectory": "选择此选项,在将 JDK 提取到目标目录之前清除该目录。",
+ "loc.input.label.createExtractDirectory": "创建用于提取的目录",
+ "loc.input.help.createExtractDirectory": "默认情况下,任务将为提取 JDK 创建类似此 JAVA_HOME_8_X64_OpenJDK_zip 的目录。此选项允许禁用创建此文件夹,在这种情况下,JDK 将位于 jdkDestinationDirectory 的根中",
+ "loc.messages.DownloadFromAzureBlobStorage": "正在下载 Azure blob 存储中的项目,容器名称: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "已成功提取项列表",
+ "loc.messages.StorageAccountDoesNotExist": "无法获取名为 %s 的 Azure 存储帐户。",
+ "loc.messages.RequestedUrlTooLong": "请求的 URL 太长,订阅中有大量资源组时通常会发生这种情况,请尝试设置 azureResourceGroupName 输入。",
+ "loc.messages.UnzipExtractFile": "正在提取文件: %s",
+ "loc.messages.SevenZipExtractFile": "正在提取文件: %s",
+ "loc.messages.TarExtractFile": "正在提取文件: %s",
+ "loc.messages.ExtractFileFailedMsg": "文件 %s 提取失败 \n代码: %d \nStdOut: %s \nstderr: %s \n错误: %s;",
+ "loc.messages.ExtractNonExistFile": "文件 %s 提取失败,因为它不存在。",
+ "loc.messages.ExtractDirFailed": "文件 %s 提取失败,因为该文件是一个目录。",
+ "loc.messages.CreateTempDir": "创建临时文件夹 %s 以解压缩 %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "已将临时 tar 从 %s 解压缩到 %s",
+ "loc.messages.RemoveTempDir": "正在删除临时文件夹: %s",
+ "loc.messages.ExtractFailedCannotCreate": "文件 %s 提取失败,因为无法创建临时位置 %s",
+ "loc.messages.CleanDestDir": "提取前需清理目标文件夹: %s",
+ "loc.messages.CreateDestDir": "创建目标文件夹: %s",
+ "loc.messages.RetrievingJdkFromAzure": "正在检索 Azure blob 存储中的 JDK。",
+ "loc.messages.RetrievingJdkFromLocalPath": "正在检索本地路径中的 JDK。",
+ "loc.messages.SucceedMsg": "已成功提取所有文件。",
+ "loc.messages.SetJavaHome": "正在将 JAVA_HOME 设置为: %s",
+ "loc.messages.SetExtendedJavaHome": "正在将 %s 设置为: %s",
+ "loc.messages.UnsupportedFileExtension": "指定的 JDK 源文件没有受支持的文件扩展名。",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "无法提取 Azure 的访问令牌。状态代码: %s,状态消息: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "无法提取托管服务主体的访问令牌。请为虚拟机配置托管服务标识(MSI)(https://aka.ms/azure-msi-docs)。状态代码: %s,状态消息: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "无法提取托管服务主体的访问令牌。状态代码: %s,状态消息: %s",
+ "loc.messages.ExpiredServicePrincipal": "无法提取 Azure 的访问令牌。请确保使用的服务主体有效且未过期。",
+ "loc.messages.CorrelationIdForARM": "来自 ARM API 调用响应的相关 ID: %s",
+ "loc.messages.JavaNotPreinstalled": "在此代理上未预安装 Java %s",
+ "loc.messages.UsePreinstalledJava": "使用 %s 中的预安装 JDK",
+ "loc.messages.WrongArchiveStructure": "JDK 文件无效。验证 JDK 文件中是否只有一个根文件夹,其中包含 'bin' 文件夹。",
+ "loc.messages.WrongArchiveFile": "存档文件错误。没有任何包含 JDK 的文件夹",
+ "loc.messages.ShareAccessError": "网络共享资源不可用: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "JDK 文件不受支持。验证 JDK 文件中是否恰好包含一个文件夹。",
+ "loc.messages.NoPKGFile": "找不到 PKG 文件。",
+ "loc.messages.SeveralPKGFiles": "找到多个 PKG 文件。",
+ "loc.messages.InstallJDK": "正在安装 JDK。",
+ "loc.messages.AttachDiskImage": "附加数据映像。",
+ "loc.messages.DetachDiskImage": "正在分离磁盘映像。",
+ "loc.messages.PkgPathDoesNotExist": "包路径不存在。",
+ "loc.messages.PreInstalledJavaUpgraded": "预安装的 JDK 已更新。",
+ "loc.messages.JavaSuccessfullyInstalled": "已成功安装 Java",
+ "loc.messages.ArchiveWasExtractedEarlier": "之前已提取了 JDK 的存档 - 正在跳过提取",
+ "loc.messages.ExtractingArchiveToPath": "正在将存档提取到: %s",
+ "loc.messages.ErrorCleaningFolder": "文件夹清理错误: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/JavaToolInstallerV0/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..7aa6b2c5c13d
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "JAVA 工具安裝程式",
+ "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=875287)或[參閱 Java 文件](https://docs.oracle.com/java/)",
+ "loc.description": "從使用者提供的 Azure Blob 或工具快取取得特定版本的 Java,並設定 JAVA_HOME",
+ "loc.instanceNameFormat": "使用 JAVA $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "從 Azure Blob 下載 JAVA",
+ "loc.input.label.versionSpec": "JDK 版本",
+ "loc.input.help.versionSpec": "指定要在路徑上提供的 JDK 版本數字。請使用整數版本,例如 10",
+ "loc.input.label.jdkArchitectureOption": "JDK 架構",
+ "loc.input.help.jdkArchitectureOption": "JDK 的架構 (x86、x64)。",
+ "loc.input.label.jdkSourceOption": "JDK 來源",
+ "loc.input.help.jdkSourceOption": "壓縮的 JDK 來源。",
+ "loc.input.label.jdkFile": "JDK 檔案",
+ "loc.input.help.jdkFile": "壓縮的 JDK 所在位置路徑。路徑可以在您的來源存放庫中,也可以是代理程式上的本機路徑。",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure 訂用帳戶",
+ "loc.input.help.azureResourceManagerEndpoint": "選擇 JDK 的 Azure Resource Manager 訂用帳戶。",
+ "loc.input.label.azureStorageAccountName": "儲存體帳戶名稱",
+ "loc.input.help.azureStorageAccountName": "列出 Azure 傳統和 Resource Manager 儲存體帳戶。請選取 JDK 所在儲存體帳戶的名稱。",
+ "loc.input.label.azureContainerName": "容器名稱",
+ "loc.input.help.azureContainerName": "JDK 所在儲存體帳戶中的容器名稱。",
+ "loc.input.label.azureCommonVirtualFile": "通用虛擬路徑",
+ "loc.input.help.azureCommonVirtualFile": "Azure 儲存體容器內的 JDK 路徑。",
+ "loc.input.label.jdkDestinationDirectory": "目的地目錄",
+ "loc.input.help.jdkDestinationDirectory": "在 Linux 和 Windows 上,這是作為 JDK 安裝的目的地目錄使用。在 macOS 上,這個目錄是作為解壓縮 .dmg 的暫存資料夾使用,因為 macOS 不支援將 JDK 安裝至特定目錄。",
+ "loc.input.label.azureResourceGroupName": "資源群組名稱",
+ "loc.input.help.azureResourceGroupName": "儲存體帳戶的資源群組名稱。",
+ "loc.input.label.cleanDestinationDirectory": "清理目的地目錄",
+ "loc.input.help.cleanDestinationDirectory": "選取此選項以先清理目的地目錄,再將 JDK 解壓縮到其中。",
+ "loc.input.label.createExtractDirectory": "建立用於解壓縮的目錄",
+ "loc.input.help.createExtractDirectory": "根據預設,工作會建立與這個 JAVA_HOME_8_X64_OpenJDK_zip 類似的目錄來解壓縮 JDK。此選項可讓您停用此資料夾的建立,在此情況下,JDK 會位於 jdkDestinationDirectory 的根目錄中",
+ "loc.messages.DownloadFromAzureBlobStorage": "正在從 Azure Blob 儲存體下載成品,容器名稱: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "已成功擷取項目清單",
+ "loc.messages.StorageAccountDoesNotExist": "無法取得名稱為 %s 的 Azure 儲存體帳戶。",
+ "loc.messages.RequestedUrlTooLong": "要求的 URL 太長,這通常在您的訂用帳戶中有許多資源群組時會發生,請嘗試設定 azureResourceGroupName 輸入。",
+ "loc.messages.UnzipExtractFile": "正在解壓縮檔案: %s",
+ "loc.messages.SevenZipExtractFile": "正在解壓縮檔案: %s",
+ "loc.messages.TarExtractFile": "正在解壓縮檔案: %s",
+ "loc.messages.ExtractFileFailedMsg": "檔案 %s 解壓縮失敗\n代碼: %d\nStdOut: %s\nSTDERR: %s\n錯誤: %s;",
+ "loc.messages.ExtractNonExistFile": "因為檔案 %s 不存在,所以解壓縮失敗。",
+ "loc.messages.ExtractDirFailed": "因為檔案 %s 為目錄,所以解壓縮失敗。",
+ "loc.messages.CreateTempDir": "正在建立暫存資料夾 %s 以解壓縮 %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "已將暫存 tar 從 %s 解壓縮至 %s",
+ "loc.messages.RemoveTempDir": "正在移除暫存資料夾: %s",
+ "loc.messages.ExtractFailedCannotCreate": "因為無法建立暫存位置,所以檔案 %s 解壓縮失敗: %s",
+ "loc.messages.CleanDestDir": "正於擷取前清理目的地資料夾: %s",
+ "loc.messages.CreateDestDir": "正在建立目的地資料夾: %s",
+ "loc.messages.RetrievingJdkFromAzure": "正在從 Azure Blob 儲存體擷取 JDK。",
+ "loc.messages.RetrievingJdkFromLocalPath": "正在從本機路徑擷取 JDK。",
+ "loc.messages.SucceedMsg": "已成功解壓縮所有檔案。",
+ "loc.messages.SetJavaHome": "正在將 JAVA_HOME 設為: %s",
+ "loc.messages.SetExtendedJavaHome": "正在將 %s 設為: %s",
+ "loc.messages.UnsupportedFileExtension": "指定的 JDK 原始程式檔沒有支援的副檔名。",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "無法擷取 Azure 的存取權杖。狀態碼: %s,狀態訊息: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "無法擷取受控服務主體的存取權杖。請設定虛擬機器的受控服務識別 (MSI) (https://aka.ms/azure-msi-docs)。狀態碼: %s,狀態訊息: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "無法擷取受控服務主體的存取權杖。狀態碼: %s,狀態訊息: %s",
+ "loc.messages.ExpiredServicePrincipal": "無法擷取 Azure 的存取權杖。請驗證使用的服務主體是否有效且未過期。",
+ "loc.messages.CorrelationIdForARM": "來自 ARM api 呼叫回應的相互關聯識別碼: %s",
+ "loc.messages.JavaNotPreinstalled": "JAVA %s 未預先安裝在此代理程式上",
+ "loc.messages.UsePreinstalledJava": "從 %s 使用預先安裝的 JDK",
+ "loc.messages.WrongArchiveStructure": "JDK 檔案無效。請驗證 JDK 檔案是否只包含一個 'bin' 的根資料夾。",
+ "loc.messages.WrongArchiveFile": "封存檔案錯誤。沒有包含 JDK 的資料夾",
+ "loc.messages.ShareAccessError": "無法使用網路共用資源: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "不支援 JDK 檔案。請驗證 JDK 檔案是否正好只包含一個資料夾。",
+ "loc.messages.NoPKGFile": "找不到 PKG 檔案。",
+ "loc.messages.SeveralPKGFiles": "找到多個 PKG 檔案。",
+ "loc.messages.InstallJDK": "正在安裝 JDK。",
+ "loc.messages.AttachDiskImage": "正在附加磁碟映像。",
+ "loc.messages.DetachDiskImage": "正在中斷磁碟映像的連結。",
+ "loc.messages.PkgPathDoesNotExist": "套件路徑不存在。",
+ "loc.messages.PreInstalledJavaUpgraded": "預先安裝的 JDK 已更新。",
+ "loc.messages.JavaSuccessfullyInstalled": "JAVA 已成功安裝",
+ "loc.messages.ArchiveWasExtractedEarlier": "具有 JDK 的封存先前已解壓縮 - 即將跳過解壓縮",
+ "loc.messages.ExtractingArchiveToPath": "正在將封存解壓縮至: %s",
+ "loc.messages.ErrorCleaningFolder": "資料夾清除錯誤: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/Tests/L0.ts b/_generated/JavaToolInstallerV0/Tests/L0.ts
new file mode 100644
index 000000000000..b392114a571d
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Tests/L0.ts
@@ -0,0 +1,54 @@
+import assert = require('assert');
+import path = require('path');
+import os = require('os');
+import process = require('process');
+import fs = require('fs');
+
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('JavaToolInstaller L0 Suite', function () {
+ it('should fail when JavaToolInstaller is run with no azure server endpoint', function () {
+ this.timeout(20000);
+
+ const testPath: string = path.join(__dirname, 'L0FailsIfNoAzureEndpointSet.js');
+ const testRunner: ttm.MockTestRunner = new ttm.MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ });
+
+ it('should run successfully when fetching JDK files from azure storage', function () {
+ this.timeout(20000);
+
+ const testPath: string = path.join(__dirname, 'L0DownloadsJdkFromAzureStorage.js');
+ const testRunner: ttm.MockTestRunner = new ttm.MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.succeeded, 'task should have succeeded.');
+ });
+
+ it('should run successfully when fetching JDK files from azure storage from subfolder', function () {
+ this.timeout(20000);
+
+ const testPath: string = path.join(__dirname, 'L0DownloadsJdkFromAzureStorageSubFolder.js');
+ const testRunner: ttm.MockTestRunner = new ttm.MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert((testRunner.stdOutContained('jdkFileName: DestinationDirectory\\JDKname.tar.gz') || testRunner.stdOutContained('jdkFileName: DestinationDirectory/JDKname.tar.gz')) , 'JDK archive should unpack in the right destination directory');
+ assert(testRunner.succeeded, 'task should have succeeded.');
+ });
+
+ it('should fail when JavaToolInstaller is run with to destination folder specified', function () {
+ this.timeout(20000);
+
+ const testPath: string = path.join(__dirname, 'L0NoDestinationFolder.js');
+ const testRunner: ttm.MockTestRunner = new ttm.MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ });
+});
diff --git a/_generated/JavaToolInstallerV0/Tests/L0DownloadsJdkFromAzureStorage.ts b/_generated/JavaToolInstallerV0/Tests/L0DownloadsJdkFromAzureStorage.ts
new file mode 100644
index 000000000000..ae924b721fe4
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Tests/L0DownloadsJdkFromAzureStorage.ts
@@ -0,0 +1,119 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import msRestAzure = require('azure-pipelines-tasks-azure-arm-rest/azure-arm-common');
+import path = require('path');
+import mockTask = require('azure-pipelines-task-lib/mock-task');
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSourceOption", "AzureStorage")
+tr.setInput("jdkArchitectureOption", "x64");
+tr.setInput("azureResourceManagerEndpoint", "ARM1");
+tr.setInput("azureStorageAccountName", "storage1");
+tr.setInput("azureContainerName", "container1");
+tr.setInput("azureCommonVirtualFile", "JDKname.tar.gz");
+tr.setInput("jdkDestinationDirectory", "DestinationDirectory");
+tr.setInput("cleanDestinationDirectory", "false");
+
+process.env['AGENT_TOOLSDIRECTORY'] = '/tool';
+process.env['AGENT_VERSION'] = '2.194.0';
+
+process.env['ENDPOINT_URL_ID1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_username'] = 'dummyusername';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_password'] = 'dummypassword';
+process.env['ENDPOINT_DATA_ID1_acceptUntrustedCerts'] = 'true';
+
+process.env['ENDPOINT_URL_ARM1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_serviceprincipalid'] = 'dummyid';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_serviceprincipalkey'] = 'dummykey';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_tenantid'] = 'dummyTenantid';
+process.env['ENDPOINT_DATA_ARM1_environmentAuthorityUrl'] = 'dummyurl';
+process.env['ENDPOINT_DATA_ARM1_activeDirectoryServiceEndpointResourceId'] = 'dummyResourceId';
+process.env['ENDPOINT_DATA_ARM1_subscriptionId'] = 'dummySubscriptionId';
+
+const a: ma.TaskLibAnswers = {
+ "stats": {
+ "DestinationDirectory\\JDKname.tar.gz": true,
+ "DestinationDirectory/JDKname.tar.gz": true,
+ },
+ "find": {
+ "DestinationDirectory": ["rootJDK/", "rootJDK/secondlevelJDK2"],
+ },
+};
+
+tr.setAnswers(a);
+
+tr.registerMock("azure-pipelines-tasks-azure-arm-rest/azure-arm-storage", {
+ StorageManagementClient: function (A, B) {
+ return {
+ storageAccounts: {
+ get: function (A) {
+ return {
+ properties: {
+ primaryEndpoints: {
+ blob: "primaryBlobUrl"
+ }
+ },
+ id: "StorageAccountUrl"
+ }
+ },
+ listkeys: function (A, B, C) {
+ return ["accesskey1", "accessKey2"];
+ }
+ }
+ }
+ },
+ StorageAccounts: {
+ getResourceGroupNameFromUri: function (A) {
+ return "storageAccountResouceGroupName";
+ }
+ }
+});
+
+tr.registerMock("azure-pipelines-tasks-azure-arm-rest/azure-arm-common", {
+ ApplicationTokenCredentials: function(A,B,C,D,E,F,G) {
+ return {};
+ }
+});
+
+tr.registerMock('./AzureStorageArtifacts/AzureStorageArtifactDownloader',{
+ AzureStorageArtifactDownloader: function(A,B,C) {
+ return {
+ downloadArtifacts: function(A,B) {
+ return "pathFromDownloader";
+ }
+ }
+ }
+})
+
+const mtl = require("azure-pipelines-tool-lib/tool")
+const mtlClone = Object.assign({}, mtl);
+
+mtlClone.prependPath = function(variable1: string, variable2: string) {
+ return {};
+};
+
+tr.registerMock("azure-pipelines-tool-lib/tool", mtlClone);
+
+const mfs = require('fs')
+const mfsClone = Object.assign({}, mfs);
+
+mfsClone.lstatSync = function(variable: string) {
+ return {
+ isDirectory: function() {
+ return true;
+ }
+ };
+};
+
+mfsClone.existsSync = function (variable: string) {
+ if (variable === "DestinationDirectory\\econdlevelJDK2" || variable === "DestinationDirectory/econdlevelJDK2") {
+ return false;
+ } else return true;
+}
+
+tr.registerMock('fs', mfsClone);
+
+tr.run();
diff --git a/_generated/JavaToolInstallerV0/Tests/L0DownloadsJdkFromAzureStorageSubFolder.ts b/_generated/JavaToolInstallerV0/Tests/L0DownloadsJdkFromAzureStorageSubFolder.ts
new file mode 100644
index 000000000000..5176ce747802
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Tests/L0DownloadsJdkFromAzureStorageSubFolder.ts
@@ -0,0 +1,120 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import msRestAzure = require('azure-pipelines-tasks-azure-arm-rest/azure-arm-common');
+import path = require('path');
+import mockTask = require('azure-pipelines-task-lib/mock-task');
+
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSourceOption", "AzureStorage")
+tr.setInput("jdkArchitectureOption", "x64");
+tr.setInput("azureResourceManagerEndpoint", "ARM1");
+tr.setInput("azureStorageAccountName", "storage1");
+tr.setInput("azureContainerName", "container1");
+tr.setInput("azureCommonVirtualFile", "folder/JDKname.tar.gz");
+tr.setInput("jdkDestinationDirectory", "DestinationDirectory");
+tr.setInput("cleanDestinationDirectory", "true");
+
+process.env['AGENT_TOOLSDIRECTORY'] = '/tool';
+process.env['AGENT_VERSION'] = '2.194.0';
+
+process.env['ENDPOINT_URL_ID1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_username'] = 'dummyusername';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_password'] = 'dummypassword';
+process.env['ENDPOINT_DATA_ID1_acceptUntrustedCerts'] = 'true';
+
+process.env['ENDPOINT_URL_ARM1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_serviceprincipalid'] = 'dummyid';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_serviceprincipalkey'] = 'dummykey';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_tenantid'] = 'dummyTenantid';
+process.env['ENDPOINT_DATA_ARM1_environmentAuthorityUrl'] = 'dummyurl';
+process.env['ENDPOINT_DATA_ARM1_activeDirectoryServiceEndpointResourceId'] = 'dummyResourceId';
+process.env['ENDPOINT_DATA_ARM1_subscriptionId'] = 'dummySubscriptionId';
+
+const a: ma.TaskLibAnswers = {
+ "stats": {
+ "DestinationDirectory\\JDKname.tar.gz": true,
+ "DestinationDirectory/JDKname.tar.gz": true,
+ },
+ "find": {
+ "DestinationDirectory": ["rootJDK/", "rootJDK/secondlevelJDK2"],
+ },
+};
+
+tr.setAnswers(a);
+
+tr.registerMock("azure-pipelines-tasks-azure-arm-rest/azure-arm-storage", {
+ StorageManagementClient: function (A, B) {
+ return {
+ storageAccounts: {
+ get: function (A) {
+ return {
+ properties: {
+ primaryEndpoints: {
+ blob: "primaryBlobUrl"
+ }
+ },
+ id: "StorageAccountUrl"
+ }
+ },
+ listkeys: function (A, B, C) {
+ return ["accesskey1", "accessKey2"];
+ }
+ }
+ }
+ },
+ StorageAccounts: {
+ getResourceGroupNameFromUri: function (A) {
+ return "storageAccountResouceGroupName";
+ }
+ }
+});
+
+tr.registerMock("azure-pipelines-tasks-azure-arm-rest/azure-arm-common", {
+ ApplicationTokenCredentials: function(A,B,C,D,E,F,G) {
+ return {};
+ }
+});
+
+tr.registerMock('./AzureStorageArtifacts/AzureStorageArtifactDownloader',{
+ AzureStorageArtifactDownloader: function(A,B,C) {
+ return {
+ downloadArtifacts: function(A,B) {
+ return "pathFromDownloader";
+ }
+ }
+ }
+})
+
+const mtl = require("azure-pipelines-tool-lib/tool")
+const mtlClone = Object.assign({}, mtl);
+
+mtlClone.prependPath = function(variable1: string, variable2: string) {
+ return {};
+};
+
+tr.registerMock("azure-pipelines-tool-lib/tool", mtlClone);
+
+const mfs = require('fs')
+const mfsClone = Object.assign({}, mfs);
+
+mfsClone.lstatSync = function(variable: string) {
+ return {
+ isDirectory: function() {
+ return true;
+ }
+ };
+};
+
+mfsClone.existsSync = function (variable: string) {
+ if (variable === "DestinationDirectory\\econdlevelJDK2" || variable === "DestinationDirectory/econdlevelJDK2" ) {
+ return false;
+ } else return true;
+}
+
+tr.registerMock('fs', mfsClone);
+
+tr.run();
diff --git a/_generated/JavaToolInstallerV0/Tests/L0FailsIfNoAzureEndpointSet.ts b/_generated/JavaToolInstallerV0/Tests/L0FailsIfNoAzureEndpointSet.ts
new file mode 100644
index 000000000000..2f6cff855c76
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Tests/L0FailsIfNoAzureEndpointSet.ts
@@ -0,0 +1,25 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import mockTask = require('azure-pipelines-task-lib/mock-task');
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSource", "Azure Storage")
+tr.setInput("artifactProvider", "azureStorage");
+tr.setInput("azureResourceManagerEndpoint", "ARM1");
+tr.setInput("azureStorageAccountName", "storage1");
+tr.setInput("azureContainerName", "container1");
+tr.setInput("azureCommonVirtualPath", "");
+tr.setInput("fileType", ".tar.gz");
+tr.setInput("destinationFolder", "javaJDK");
+tr.setInput("cleanDestinationFolder", "false");
+
+process.env['ENDPOINT_URL_ID1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_username'] = 'dummyusername';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_password'] = 'dummypassword';
+process.env['ENDPOINT_DATA_ID1_acceptUntrustedCerts'] = 'true';
+
+tr.run();
diff --git a/_generated/JavaToolInstallerV0/Tests/L0NoDestinationFolder.ts b/_generated/JavaToolInstallerV0/Tests/L0NoDestinationFolder.ts
new file mode 100644
index 000000000000..3f07ecae38ad
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Tests/L0NoDestinationFolder.ts
@@ -0,0 +1,23 @@
+import mockanswer = require('azure-pipelines-task-lib/mock-answer');
+import mockrun = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const srcPath = 'source/foo.zip';
+const destDir = '/destDir';
+const tr: mockrun.TaskMockRunner = new mockrun.TaskMockRunner(taskPath);
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSource", "Local Directory")
+tr.setInput("jdkPath", srcPath);
+//tr.setInput('destinationFolder', 'dirName');
+tr.setInput("cleanDestinationFolder", "false");
+
+// provide answers for task mock
+const a: mockanswer.TaskLibAnswers = {
+ checkPath: { },
+ find: { },
+ rmRF: { },
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JavaToolInstallerV0/Tests/L0UnzipTest.ts b/_generated/JavaToolInstallerV0/Tests/L0UnzipTest.ts
new file mode 100644
index 000000000000..378ef197c321
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/Tests/L0UnzipTest.ts
@@ -0,0 +1,98 @@
+import mockanswer = require('azure-pipelines-task-lib/mock-answer');
+import mockrun = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+var Q = require('q');
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const srcPath = 'source/foo.zip';
+const destDir = '/destDir';
+
+// task parameters
+const tr: mockrun.TaskMockRunner = new mockrun.TaskMockRunner(taskPath);
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSourceOption", "Local Directory");
+tr.setInput("jdkFile", srcPath);
+tr.setInput("jdkDestinationDirectory", destDir);
+tr.setInput("cleanDestinationDirectory", "false");
+tr.setInput("jdkArchitectureOption", "x64");
+
+// set windir
+process.env.windir = 'windir';
+
+// provide answers for task mock
+const a: mockanswer.TaskLibAnswers = {
+ exist: {[destDir]: true},
+ which: {'windir\\system32\\chcp.com': 'windir\\system32\\chcp.com'},
+ checkPath: {'windir\\system32\\chcp.com': true },
+ find: {[destDir]: [destDir]},
+ rmRF: { },
+ osType: {'osType': 'Win32'},
+ stats: {[destDir]: {'isDirectory':'true'}, 'source\\foo.zip': {'isFile':'true'}, '/destDir/foo': {'isDirectory':'true'}},
+};
+tr.setAnswers(a);
+
+// toolrunner that mimicks modification of the directory structure following a powershell unzip command
+var MockToolRunner = function (tool) {
+ var _tool;
+ var _line;
+ var _args;
+
+ this.init = function(tool) {
+ this._tool = tool;
+ };
+
+ this.arg = function (args) {
+ this._args = args;
+ return this;
+ };
+
+ this.line = function (val) {
+ this._line = val;
+ return this;
+ };
+
+ this.exec = function (options) {
+ var _this = this;
+ var defer = Q.defer();
+ console.log('exec: ' + _this._tool + ' line: ' + _this._line + ' args: ' + _this._args);
+
+ // Simulate some asynchronous event through timer
+ setTimeout(function() {
+ if (_this._tool == 'powershell') {
+ // update to pretend an unzip actually occurred
+ a.find = {[destDir]: [destDir, '/destDir/foo']};
+ console.log('directories updated: ' + a.find[destDir]);
+ }
+ defer.resolve(0);
+ }, 100);
+ return defer.promise;
+ };
+
+ this.execSync = function(options) {
+ console.log('execSync: ' + this._tool + ' line: ' + this._line + ' args: ' + this._args);
+ return this;
+ };
+
+ this.init(tool);
+};
+
+tr.registerMockExport('tool', function(tool){
+ return new MockToolRunner(tool);
+});
+
+// tool mock
+tr.registerMock('vsts-task-tool-lib/tool', {
+ debug: function(message) {
+ console.log('##debug : ' + message);
+ },
+
+ findLocalToolVersions: function(fileName) {
+ return null;
+ },
+ evaluateVersions: function(fileName) {
+ return null;
+ }
+});
+
+tr.run();
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/ThirdPartyNotice.txt b/_generated/JavaToolInstallerV0/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..afb44de23d53
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/ThirdPartyNotice.txt
@@ -0,0 +1,4743 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (JavaToolInstallerV0) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/mocha (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+3. @types/q (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+4. @types/semver (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+5. @types/uuid (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+6. align-text (git://github.com/jonschlinkert/align-text.git)
+7. amdefine (git+https://github.com/jrburke/amdefine.git)
+8. ansi-regex (git+https://github.com/chalk/ansi-regex.git)
+9. ansi-styles (git+https://github.com/chalk/ansi-styles.git)
+10. artifact-engine (https://github.com/Microsoft/azure-pipelines-extensions/tree/master/Extensions/ArtifactEngine)
+11. asn1 (git://github.com/joyent/node-asn1.git)
+12. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+13. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+14. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+15. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+16. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+17. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+18. async (git+https://github.com/caolan/async.git)
+19. async (git+https://github.com/caolan/async.git)
+20. aws-sign2 (git+https://github.com/mikeal/aws-sign.git)
+21. aws4 (git+https://github.com/mhart/aws4.git)
+22. azure-storage (git+ssh://git@github.com/Azure/azure-storage-node.git)
+23. balanced-match (git://github.com/juliangruber/balanced-match.git)
+24. balanced-match (git://github.com/juliangruber/balanced-match.git)
+25. bcrypt-pbkdf (git://github.com/joyent/node-bcrypt-pbkdf.git)
+26. bl (git+https://github.com/rvagg/bl.git)
+27. boom (git://github.com/hapijs/boom.git)
+28. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+29. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+30. browser-stdout (git+ssh://git@github.com/kumavis/browser-stdout.git)
+31. browserify-mime (git+https://github.com/broofa/node-mime.git)
+32. buffer-equal-constant-time (git+ssh://git@github.com/goinstant/buffer-equal-constant-time.git)
+33. camelcase (git+https://github.com/sindresorhus/camelcase.git)
+34. caseless (git+https://github.com/mikeal/caseless.git)
+35. center-align (git+https://github.com/jonschlinkert/center-align.git)
+36. chalk (git+https://github.com/chalk/chalk.git)
+37. cliui (git+ssh://git@github.com/bcoe/cliui.git)
+38. combined-stream (git://github.com/felixge/node-combined-stream.git)
+39. commander (git+https://github.com/tj/commander.js.git)
+40. commander (git+https://github.com/tj/commander.js.git)
+41. concat-map (git://github.com/substack/node-concat-map.git)
+42. concat-map (git://github.com/substack/node-concat-map.git)
+43. core-util-is (git://github.com/isaacs/core-util-is.git)
+44. cryptiles (git://github.com/hapijs/cryptiles.git)
+45. dashdash (git://github.com/trentm/node-dashdash.git)
+46. debug (git://github.com/visionmedia/debug.git)
+47. decamelize (git+https://github.com/sindresorhus/decamelize.git)
+48. delayed-stream (git://github.com/felixge/node-delayed-stream.git)
+49. diff (git://github.com/kpdecker/jsdiff.git)
+50. ecc-jsbn (git+https://github.com/quartzjer/ecc-jsbn.git)
+51. ecdsa-sig-formatter (git+ssh://git@github.com/Brightspace/node-ecdsa-sig-formatter.git)
+52. escape-string-regexp (git+https://github.com/sindresorhus/escape-string-regexp.git)
+53. escape-string-regexp (git+https://github.com/sindresorhus/escape-string-regexp.git)
+54. extend (git+https://github.com/justmoon/node-extend.git)
+55. extend (git+https://github.com/justmoon/node-extend.git)
+56. extsprintf (git://github.com/davepacheco/node-extsprintf.git)
+57. forever-agent (git+https://github.com/mikeal/forever-agent.git)
+58. form-data (git://github.com/form-data/form-data.git)
+59. fs.realpath (git+https://github.com/isaacs/fs.realpath.git)
+60. generate-function (git+https://github.com/mafintosh/generate-function.git)
+61. generate-object-property (git+https://github.com/mafintosh/generate-object-property.git)
+62. getpass (git+https://github.com/arekinath/node-getpass.git)
+63. glob (git://github.com/isaacs/node-glob.git)
+64. growl (git://github.com/tj/node-growl.git)
+65. handlebars (git+https://github.com/wycats/handlebars.js.git)
+66. har-validator (git+https://github.com/ahmadnassri/har-validator.git)
+67. has-ansi (git+https://github.com/sindresorhus/has-ansi.git)
+68. has-flag (git+https://github.com/sindresorhus/has-flag.git)
+69. hash-base (git+https://github.com/crypto-browserify/hash-base.git)
+70. hawk (git://github.com/hueniverse/hawk.git)
+71. he (git+https://github.com/mathiasbynens/he.git)
+72. hoek (git://github.com/hapijs/hoek.git)
+73. http-signature (git://github.com/joyent/node-http-signature.git)
+74. inflight (git+https://github.com/npm/inflight.git)
+75. inherits (git://github.com/isaacs/inherits.git)
+76. inherits (git://github.com/isaacs/inherits.git)
+77. is-buffer (git://github.com/feross/is-buffer.git)
+78. is-my-ip-valid (git+https://github.com/LinusU/is-my-ip-valid.git)
+79. is-my-json-valid (git+https://github.com/mafintosh/is-my-json-valid.git)
+80. is-property (git://github.com/mikolalysenko/is-property.git)
+81. is-typedarray (git://github.com/hughsk/is-typedarray.git)
+82. isarray (git://github.com/juliangruber/isarray.git)
+83. isemail (git+https://github.com/hapijs/isemail.git)
+84. isstream (git+https://github.com/rvagg/isstream.git)
+85. joi (git://github.com/hapijs/joi.git)
+86. jsbn (git+https://github.com/andyperlitch/jsbn.git)
+87. json-edm-parser (git+https://github.com/yaxia/json-edm-parser.git)
+88. json-schema (git+ssh://git@github.com/kriszyp/json-schema.git)
+89. json-stringify-safe (git://github.com/isaacs/json-stringify-safe.git)
+90. jsonparse (git+ssh://git@github.com/creationix/jsonparse.git)
+91. jsonpointer (git+ssh://git@github.com/janl/node-jsonpointer.git)
+92. jsonwebtoken (git+https://github.com/auth0/node-jsonwebtoken.git)
+93. jsprim (git://github.com/joyent/node-jsprim.git)
+94. jwa (git://github.com/brianloveswords/node-jwa.git)
+95. jws (git://github.com/brianloveswords/node-jws.git)
+96. kind-of (git+https://github.com/jonschlinkert/kind-of.git)
+97. lazy-cache (git+https://github.com/jonschlinkert/lazy-cache.git)
+98. lodash (git+https://github.com/lodash/lodash.git)
+99. lodash.once (git+https://github.com/lodash/lodash.git)
+100. longest (git+https://github.com/jonschlinkert/longest.git)
+101. md5.js (git+https://github.com/crypto-browserify/md5.js.git)
+102. mime-db (git+https://github.com/jshttp/mime-db.git)
+103. mime-types (git+https://github.com/jshttp/mime-types.git)
+104. minimatch (git://github.com/isaacs/minimatch.git)
+105. minimatch (git://github.com/isaacs/minimatch.git)
+106. minimatch (git://github.com/isaacs/minimatch.git)
+107. minimist (git://github.com/substack/minimist.git)
+108. minimist (git://github.com/substack/minimist.git)
+109. mkdirp (git+https://github.com/substack/node-mkdirp.git)
+110. mocha (git+https://github.com/mochajs/mocha.git)
+111. mockery (git://github.com/mfncooper/mockery.git)
+112. moment (git+https://github.com/moment/moment.git)
+113. ms (git+https://github.com/zeit/ms.git)
+114. ms (git+https://github.com/zeit/ms.git)
+115. node-uuid (git+https://github.com/broofa/node-uuid.git)
+116. oauth-sign (git+https://github.com/mikeal/oauth-sign.git)
+117. once (git://github.com/isaacs/once.git)
+118. optimist (git+ssh://git@github.com/substack/node-optimist.git)
+119. path-is-absolute (git+https://github.com/sindresorhus/path-is-absolute.git)
+120. pinkie (git+https://github.com/floatdrop/pinkie.git)
+121. pinkie-promise (git+https://github.com/floatdrop/pinkie-promise.git)
+122. process-nextick-args (git+https://github.com/calvinmetcalf/process-nextick-args.git)
+123. punycode (git+https://github.com/bestiejs/punycode.js.git)
+124. q (git://github.com/kriskowal/q.git)
+125. qs (git+https://github.com/ljharb/qs.git)
+126. readable-stream (git://github.com/nodejs/readable-stream.git)
+127. repeat-string (git+https://github.com/jonschlinkert/repeat-string.git)
+128. request (git+https://github.com/request/request.git)
+129. right-align (git://github.com/jonschlinkert/right-align.git)
+130. safe-buffer (git://github.com/feross/safe-buffer.git)
+131. safer-buffer (git+https://github.com/ChALkeR/safer-buffer.git)
+132. sax (git://github.com/isaacs/sax-js.git)
+133. semver (git+https://github.com/npm/node-semver.git)
+134. semver-compare (git://github.com/substack/semver-compare.git)
+135. shelljs (git://github.com/arturadib/shelljs.git)
+136. sntp (git://github.com/hueniverse/sntp.git)
+137. source-map (git+ssh://git@github.com/mozilla/source-map.git)
+138. source-map (git+ssh://git@github.com/mozilla/source-map.git)
+139. sshpk (git+https://github.com/arekinath/node-sshpk.git)
+140. string_decoder (git://github.com/rvagg/string_decoder.git)
+141. stringstream (git+https://github.com/mhart/StringStream.git)
+142. strip-ansi (git+https://github.com/chalk/strip-ansi.git)
+143. supports-color (git+https://github.com/chalk/supports-color.git)
+144. supports-color (git+https://github.com/chalk/supports-color.git)
+145. topo (git://github.com/hapijs/topo.git)
+146. tough-cookie (git://github.com/salesforce/tough-cookie.git)
+147. tunnel (git+https://github.com/koichik/node-tunnel.git)
+148. tunnel-agent (git+https://github.com/mikeal/tunnel-agent.git)
+149. tweetnacl (git+https://github.com/dchest/tweetnacl-js.git)
+150. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+151. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+152. uglify-js (git+https://github.com/mishoo/UglifyJS2.git)
+153. uglify-to-browserify (git+https://github.com/ForbesLindesay/uglify-to-browserify.git)
+154. underscore (git://github.com/jashkenas/underscore.git)
+155. util-deprecate (git://github.com/TooTallNate/util-deprecate.git)
+156. uuid (git+https://github.com/kelektiv/node-uuid.git)
+157. validator (git+ssh://git@github.com/chriso/validator.js.git)
+158. verror (git://github.com/davepacheco/node-verror.git)
+159. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git)
+160. vsts-task-tool-lib (git+https://github.com/microsoft/vsts-task-installer-lib.git)
+161. window-size (git+https://github.com/jonschlinkert/window-size.git)
+162. wordwrap (git://github.com/substack/node-wordwrap.git)
+163. wordwrap (git://github.com/substack/node-wordwrap.git)
+164. wrappy (git+https://github.com/npm/wrappy.git)
+165. xml2js (git+https://github.com/Leonidas-from-XIV/node-xml2js.git)
+166. xmlbuilder (git://github.com/oozcitak/xmlbuilder-js.git)
+167. xtend (git://github.com/Raynos/xtend.git)
+168. yargs (git+ssh://git@github.com/bcoe/yargs.git)
+
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/q NOTICES, INFORMATION, AND LICENSE
+
+%% @types/semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/semver NOTICES, INFORMATION, AND LICENSE
+
+%% @types/uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/uuid NOTICES, INFORMATION, AND LICENSE
+
+%% align-text NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF align-text NOTICES, INFORMATION, AND LICENSE
+
+%% amdefine NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+amdefine is released under two licenses: new BSD, and MIT. You may pick the
+license that best suits your development needs. The text of both licenses are
+provided below.
+
+
+The "New" BSD License:
+----------------------
+
+Copyright (c) 2011-2016, The Dojo Foundation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the Dojo Foundation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+MIT License
+-----------
+
+Copyright (c) 2011-2016, The Dojo Foundation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF amdefine NOTICES, INFORMATION, AND LICENSE
+
+%% ansi-regex NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF ansi-regex NOTICES, INFORMATION, AND LICENSE
+
+%% ansi-styles NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF ansi-styles NOTICES, INFORMATION, AND LICENSE
+
+%% artifact-engine NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF artifact-engine NOTICES, INFORMATION, AND LICENSE
+
+%% asn1 NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2011 Mark Cavage, All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE
+=========================================
+END OF asn1 NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% async NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2010-2014 Caolan McMahon
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF async NOTICES, INFORMATION, AND LICENSE
+
+%% async NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2010-2018 Caolan McMahon
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF async NOTICES, INFORMATION, AND LICENSE
+
+%% aws-sign2 NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF aws-sign2 NOTICES, INFORMATION, AND LICENSE
+
+%% aws4 NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2013 Michael Hart (michael.hart.au@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF aws4 NOTICES, INFORMATION, AND LICENSE
+
+%% azure-storage NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+=========================================
+END OF azure-storage NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% bcrypt-pbkdf NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The Blowfish portions are under the following license:
+
+Blowfish block cipher for OpenBSD
+Copyright 1997 Niels Provos
+All rights reserved.
+
+Implementation advice by David Mazieres .
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+The bcrypt_pbkdf portions are under the following license:
+
+Copyright (c) 2013 Ted Unangst
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+
+Performance improvements (Javascript-specific):
+
+Copyright 2016, Joyent Inc
+Author: Alex Wilson
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF bcrypt-pbkdf NOTICES, INFORMATION, AND LICENSE
+
+%% bl NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+=====================
+
+Copyright (c) 2014 bl contributors
+----------------------------------
+
+*bl contributors listed at *
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF bl NOTICES, INFORMATION, AND LICENSE
+
+%% boom NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Walmart and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/boom/graphs/contributors
+=========================================
+END OF boom NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% browser-stdout NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2018 kumavis
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF browser-stdout NOTICES, INFORMATION, AND LICENSE
+
+%% browserify-mime NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2010 Benjamin Thomas, Robert Kieffer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF browserify-mime NOTICES, INFORMATION, AND LICENSE
+
+%% buffer-equal-constant-time NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2013, GoInstant Inc., a salesforce.com company
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+* Neither the name of salesforce.com, nor GoInstant, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF buffer-equal-constant-time NOTICES, INFORMATION, AND LICENSE
+
+%% camelcase NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF camelcase NOTICES, INFORMATION, AND LICENSE
+
+%% caseless NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+1. Definitions.
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+END OF TERMS AND CONDITIONS
+=========================================
+END OF caseless NOTICES, INFORMATION, AND LICENSE
+
+%% center-align NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF center-align NOTICES, INFORMATION, AND LICENSE
+
+%% chalk NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF chalk NOTICES, INFORMATION, AND LICENSE
+
+%% cliui NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015, Contributors
+
+Permission to use, copy, modify, and/or distribute this software
+for any purpose with or without fee is hereby granted, provided
+that the above copyright notice and this permission notice
+appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF cliui NOTICES, INFORMATION, AND LICENSE
+
+%% combined-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2011 Debuggable Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF combined-stream NOTICES, INFORMATION, AND LICENSE
+
+%% commander NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2011 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF commander NOTICES, INFORMATION, AND LICENSE
+
+%% commander NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2011 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF commander NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% core-util-is NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Node.js contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF core-util-is NOTICES, INFORMATION, AND LICENSE
+
+%% cryptiles NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2014, Eran Hammer and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hueniverse/cryptiles/graphs/contributors
+=========================================
+END OF cryptiles NOTICES, INFORMATION, AND LICENSE
+
+%% dashdash NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+# This is the MIT license
+
+Copyright (c) 2013 Trent Mick. All rights reserved.
+Copyright (c) 2013 Joyent Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF dashdash NOTICES, INFORMATION, AND LICENSE
+
+%% debug NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the 'Software'), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF debug NOTICES, INFORMATION, AND LICENSE
+
+%% decamelize NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF decamelize NOTICES, INFORMATION, AND LICENSE
+
+%% delayed-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2011 Debuggable Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF delayed-stream NOTICES, INFORMATION, AND LICENSE
+
+%% diff NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Software License Agreement (BSD License)
+
+Copyright (c) 2009-2015, Kevin Decker
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+* Neither the name of Kevin Decker nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF diff NOTICES, INFORMATION, AND LICENSE
+
+%% ecc-jsbn NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Jeremie Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF ecc-jsbn NOTICES, INFORMATION, AND LICENSE
+
+%% ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2015 D2L Corporation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+=========================================
+END OF ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE
+
+%% escape-string-regexp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF escape-string-regexp NOTICES, INFORMATION, AND LICENSE
+
+%% escape-string-regexp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF escape-string-regexp NOTICES, INFORMATION, AND LICENSE
+
+%% extend NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Stefan Thomas
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF extend NOTICES, INFORMATION, AND LICENSE
+
+%% extend NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF extend NOTICES, INFORMATION, AND LICENSE
+
+%% extsprintf NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Joyent, Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE
+=========================================
+END OF extsprintf NOTICES, INFORMATION, AND LICENSE
+
+%% forever-agent NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF forever-agent NOTICES, INFORMATION, AND LICENSE
+
+%% form-data NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+=========================================
+END OF form-data NOTICES, INFORMATION, AND LICENSE
+
+%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+----
+
+This library bundles a version of the `fs.realpath` and `fs.realpathSync`
+methods from Node.js v0.10 under the terms of the Node.js MIT license.
+
+Node's license follows, also included at the header of `old.js` which contains
+the licensed code:
+
+ Copyright Joyent, Inc. and other Node contributors.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF fs.realpath NOTICES, INFORMATION, AND LICENSE
+
+%% generate-function NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF generate-function NOTICES, INFORMATION, AND LICENSE
+
+%% generate-object-property NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF generate-object-property NOTICES, INFORMATION, AND LICENSE
+
+%% getpass NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF getpass NOTICES, INFORMATION, AND LICENSE
+
+%% glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF glob NOTICES, INFORMATION, AND LICENSE
+
+%% growl NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF growl NOTICES, INFORMATION, AND LICENSE
+
+%% handlebars NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (C) 2011-2016 by Yehuda Katz
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF handlebars NOTICES, INFORMATION, AND LICENSE
+
+%% har-validator NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015, Ahmad Nassri
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF har-validator NOTICES, INFORMATION, AND LICENSE
+
+%% has-ansi NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF has-ansi NOTICES, INFORMATION, AND LICENSE
+
+%% has-flag NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF has-flag NOTICES, INFORMATION, AND LICENSE
+
+%% hash-base NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Kirill Fomichev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF hash-base NOTICES, INFORMATION, AND LICENSE
+
+%% hawk NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Eran Hammer and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hueniverse/hawk/graphs/contributors
+=========================================
+END OF hawk NOTICES, INFORMATION, AND LICENSE
+
+%% he NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF he NOTICES, INFORMATION, AND LICENSE
+
+%% hoek NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2011-2014, Walmart and other contributors.
+Copyright (c) 2011, Yahoo Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/hapi/graphs/contributors
+Portions of this project were initially based on the Yahoo! Inc. Postmile project,
+published at https://github.com/yahoo/postmile.
+=========================================
+END OF hoek NOTICES, INFORMATION, AND LICENSE
+
+%% http-signature NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF http-signature NOTICES, INFORMATION, AND LICENSE
+
+%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF inflight NOTICES, INFORMATION, AND LICENSE
+
+%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF inherits NOTICES, INFORMATION, AND LICENSE
+
+%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF inherits NOTICES, INFORMATION, AND LICENSE
+
+%% is-buffer NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Feross Aboukhadijeh
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF is-buffer NOTICES, INFORMATION, AND LICENSE
+
+%% is-my-ip-valid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF is-my-ip-valid NOTICES, INFORMATION, AND LICENSE
+
+%% is-my-json-valid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF is-my-json-valid NOTICES, INFORMATION, AND LICENSE
+
+%% is-property NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2013 Mikola Lysenko
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF is-property NOTICES, INFORMATION, AND LICENSE
+
+%% is-typedarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF is-typedarray NOTICES, INFORMATION, AND LICENSE
+
+%% isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF isarray NOTICES, INFORMATION, AND LICENSE
+
+%% isemail NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright © 2008-2011, Dominic Sayers
+Copyright © 2013-2014, GlobeSherpa
+Copyright © 2014-2015, Eli Skeggs
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+- Neither the name of Dominic Sayers nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF isemail NOTICES, INFORMATION, AND LICENSE
+
+%% isstream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+=====================
+
+Copyright (c) 2015 Rod Vagg
+---------------------------
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF isstream NOTICES, INFORMATION, AND LICENSE
+
+%% joi NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Walmart and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/joi/graphs/contributors
+=========================================
+END OF joi NOTICES, INFORMATION, AND LICENSE
+
+%% jsbn NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Licensing
+---------
+
+This software is covered under the following copyright:
+
+/*
+ * Copyright (c) 2003-2005 Tom Wu
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+Address all questions regarding this license to:
+
+ Tom Wu
+ tjw@cs.Stanford.EDU
+=========================================
+END OF jsbn NOTICES, INFORMATION, AND LICENSE
+
+%% json-edm-parser NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Yang Xia
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF json-edm-parser NOTICES, INFORMATION, AND LICENSE
+
+%% json-schema NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF json-schema NOTICES, INFORMATION, AND LICENSE
+
+%% json-stringify-safe NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF json-stringify-safe NOTICES, INFORMATION, AND LICENSE
+
+%% jsonparse NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License
+
+Copyright (c) 2012 Tim Caswell
+
+Permission is hereby granted, free of charge,
+to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to
+deal in the Software without restriction, including
+without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom
+the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF jsonparse NOTICES, INFORMATION, AND LICENSE
+
+%% jsonpointer NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF jsonpointer NOTICES, INFORMATION, AND LICENSE
+
+%% jsonwebtoken NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015 Auth0, Inc. (http://auth0.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF jsonwebtoken NOTICES, INFORMATION, AND LICENSE
+
+%% jsprim NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Joyent, Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE
+=========================================
+END OF jsprim NOTICES, INFORMATION, AND LICENSE
+
+%% jwa NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2013 Brian J. Brennan
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF jwa NOTICES, INFORMATION, AND LICENSE
+
+%% jws NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2013 Brian J. Brennan
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF jws NOTICES, INFORMATION, AND LICENSE
+
+%% kind-of NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF kind-of NOTICES, INFORMATION, AND LICENSE
+
+%% lazy-cache NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF lazy-cache NOTICES, INFORMATION, AND LICENSE
+
+%% lodash NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright JS Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
+=========================================
+END OF lodash NOTICES, INFORMATION, AND LICENSE
+
+%% lodash.once NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright jQuery Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
+=========================================
+END OF lodash.once NOTICES, INFORMATION, AND LICENSE
+
+%% longest NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF longest NOTICES, INFORMATION, AND LICENSE
+
+%% md5.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Kirill Fomichev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF md5.js NOTICES, INFORMATION, AND LICENSE
+
+%% mime-db NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Jonathan Ong me@jongleberry.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF mime-db NOTICES, INFORMATION, AND LICENSE
+
+%% mime-types NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2014 Jonathan Ong
+Copyright (c) 2015 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mime-types NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% minimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF minimist NOTICES, INFORMATION, AND LICENSE
+
+%% minimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF minimist NOTICES, INFORMATION, AND LICENSE
+
+%% mkdirp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF mkdirp NOTICES, INFORMATION, AND LICENSE
+
+%% mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2011-2018 JS Foundation and contributors, https://js.foundation
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mocha NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% moment NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF moment NOTICES, INFORMATION, AND LICENSE
+
+%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Zeit, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF ms NOTICES, INFORMATION, AND LICENSE
+
+%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Zeit, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF ms NOTICES, INFORMATION, AND LICENSE
+
+%% node-uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2012 Robert Kieffer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF node-uuid NOTICES, INFORMATION, AND LICENSE
+
+%% oauth-sign NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF oauth-sign NOTICES, INFORMATION, AND LICENSE
+
+%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF once NOTICES, INFORMATION, AND LICENSE
+
+%% optimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF optimist NOTICES, INFORMATION, AND LICENSE
+
+%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE
+
+%% pinkie NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF pinkie NOTICES, INFORMATION, AND LICENSE
+
+%% pinkie-promise NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF pinkie-promise NOTICES, INFORMATION, AND LICENSE
+
+%% process-nextick-args NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+# Copyright (c) 2015 Calvin Metcalf
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.**
+=========================================
+END OF process-nextick-args NOTICES, INFORMATION, AND LICENSE
+
+%% punycode NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF punycode NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2014 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% qs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2014 Nathan LaFreniere and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors
+=========================================
+END OF qs NOTICES, INFORMATION, AND LICENSE
+
+%% readable-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF readable-stream NOTICES, INFORMATION, AND LICENSE
+
+%% repeat-string NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF repeat-string NOTICES, INFORMATION, AND LICENSE
+
+%% request NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF request NOTICES, INFORMATION, AND LICENSE
+
+%% right-align NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF right-align NOTICES, INFORMATION, AND LICENSE
+
+%% safe-buffer NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Feross Aboukhadijeh
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF safe-buffer NOTICES, INFORMATION, AND LICENSE
+
+%% safer-buffer NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2018 Nikita Skovoroda
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF safer-buffer NOTICES, INFORMATION, AND LICENSE
+
+%% sax NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) Isaac Z. Schlueter ("Author")
+All rights reserved.
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+The file "examples/strict.dtd" is licensed by the W3C and used according
+to the terms of the W3C SOFTWARE NOTICE AND LICENSE. See LICENSE-W3C.html
+for details.
+=========================================
+END OF sax NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% semver-compare NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF semver-compare NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% sntp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Eran Hammer and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hueniverse/sntp/graphs/contributors
+=========================================
+END OF sntp NOTICES, INFORMATION, AND LICENSE
+
+%% source-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF source-map NOTICES, INFORMATION, AND LICENSE
+
+%% source-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2011, Mozilla Foundation and contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the names of the Mozilla Foundation nor the names of project
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF source-map NOTICES, INFORMATION, AND LICENSE
+
+%% sshpk NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF sshpk NOTICES, INFORMATION, AND LICENSE
+
+%% string_decoder NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. and other Node contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF string_decoder NOTICES, INFORMATION, AND LICENSE
+
+%% stringstream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012 Michael Hart (michael.hart.au@gmail.com)
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF stringstream NOTICES, INFORMATION, AND LICENSE
+
+%% strip-ansi NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF strip-ansi NOTICES, INFORMATION, AND LICENSE
+
+%% supports-color NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF supports-color NOTICES, INFORMATION, AND LICENSE
+
+%% supports-color NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF supports-color NOTICES, INFORMATION, AND LICENSE
+
+%% topo NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Walmart and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/topo/graphs/contributors
+=========================================
+END OF topo NOTICES, INFORMATION, AND LICENSE
+
+%% tough-cookie NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015, Salesforce.com, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===
+
+The following exceptions apply:
+
+===
+
+`public_suffix_list.dat` was obtained from
+ via
+. The license for this file is MPL/2.0. The header of
+that file reads as follows:
+
+ // This Source Code Form is subject to the terms of the Mozilla Public
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
+=========================================
+END OF tough-cookie NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel-agent NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF tunnel-agent NOTICES, INFORMATION, AND LICENSE
+
+%% tweetnacl NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to
+=========================================
+END OF tweetnacl NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Typed Rest Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Typed Rest Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% uglify-js NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+UglifyJS is released under the BSD license:
+
+Copyright 2012-2013 (c) Mihai Bazon
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ * Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+=========================================
+END OF uglify-js NOTICES, INFORMATION, AND LICENSE
+
+%% uglify-to-browserify NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2013 Forbes Lindesay
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF uglify-to-browserify NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% util-deprecate NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2014 Nathan Rajlich
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF util-deprecate NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
+%% validator NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015 Chris O'Hara
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF validator NOTICES, INFORMATION, AND LICENSE
+
+%% verror NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2016, Joyent, Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE
+=========================================
+END OF verror NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF vsts-task-lib NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-tool-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF vsts-task-tool-lib NOTICES, INFORMATION, AND LICENSE
+
+%% window-size NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF window-size NOTICES, INFORMATION, AND LICENSE
+
+%% wordwrap NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF wordwrap NOTICES, INFORMATION, AND LICENSE
+
+%% wordwrap NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF wordwrap NOTICES, INFORMATION, AND LICENSE
+
+%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF wrappy NOTICES, INFORMATION, AND LICENSE
+
+%% xml2js NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010, 2011, 2012, 2013. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF xml2js NOTICES, INFORMATION, AND LICENSE
+
+%% xmlbuilder NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF xmlbuilder NOTICES, INFORMATION, AND LICENSE
+
+%% xtend NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF xtend NOTICES, INFORMATION, AND LICENSE
+
+%% yargs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF yargs NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/JavaToolInstallerV0/icon.png b/_generated/JavaToolInstallerV0/icon.png
new file mode 100644
index 000000000000..57f4307da42a
Binary files /dev/null and b/_generated/JavaToolInstallerV0/icon.png differ
diff --git a/_generated/JavaToolInstallerV0/icon.svg b/_generated/JavaToolInstallerV0/icon.svg
new file mode 100644
index 000000000000..31c7eb322d6c
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/icon.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_generated/JavaToolInstallerV0/javatoolinstaller.ts b/_generated/JavaToolInstallerV0/javatoolinstaller.ts
new file mode 100644
index 000000000000..7667cd3266a8
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/javatoolinstaller.ts
@@ -0,0 +1,263 @@
+import fs = require('fs');
+import os = require('os');
+import path = require('path');
+import taskLib = require('azure-pipelines-task-lib/task');
+import toolLib = require('azure-pipelines-tool-lib/tool');
+import * as telemetry from 'azure-pipelines-tasks-utility-common/telemetry';
+
+import { AzureStorageArtifactDownloader } from './AzureStorageArtifacts/AzureStorageArtifactDownloader';
+import { JavaFilesExtractor, BIN_FOLDER } from './FileExtractor/JavaFilesExtractor';
+import taskutils = require('./taskutils');
+
+const VOLUMES_FOLDER: string = '/Volumes';
+const JDK_FOLDER: string = '/Library/Java/JavaVirtualMachines';
+const JDK_HOME_FOLDER: string = 'Contents/Home';
+taskLib.setResourcePath(path.join(__dirname, 'task.json'));
+
+async function run(): Promise {
+ try {
+ const versionSpec = taskLib.getInput('versionSpec', true);
+ const jdkArchitectureOption = taskLib.getInput('jdkArchitectureOption', true);
+ await getJava(versionSpec, jdkArchitectureOption);
+ taskLib.setResult(taskLib.TaskResult.Succeeded, taskLib.loc('SucceedMsg'));
+ telemetry.emitTelemetry('TaskHub', 'JavaToolInstallerV0', { versionSpec, jdkArchitectureOption });
+ } catch (error) {
+ taskLib.error(error.message);
+ taskLib.setResult(taskLib.TaskResult.Failed, error.message);
+ }
+}
+
+async function getJava(versionSpec: string, jdkArchitectureOption: string): Promise {
+ const preInstalled: boolean = ('PreInstalled' === taskLib.getInput('jdkSourceOption', true));
+ const fromAzure: boolean = ('AzureStorage' == taskLib.getInput('jdkSourceOption', true));
+ const extractLocation: string = taskLib.getPathInput('jdkDestinationDirectory', true);
+ const cleanDestinationDirectory: boolean = taskLib.getBoolInput('cleanDestinationDirectory', false);
+ let compressedFileExtension: string;
+ let jdkDirectory: string;
+ const extendedJavaHome: string = `JAVA_HOME_${versionSpec}_${jdkArchitectureOption}`.toUpperCase();
+
+ toolLib.debug('Trying to get tool from local cache first');
+ const localVersions: string[] = toolLib.findLocalToolVersions('Java');
+ const version: string = toolLib.evaluateVersions(localVersions, versionSpec);
+
+ if (version) { //This version of Java JDK is already in the cache. Use it instead of downloading again.
+ console.log(taskLib.loc('Info_ResolvedToolFromCache', version));
+ } else if (preInstalled) {
+ const preInstalledJavaDirectory: string | undefined = taskLib.getVariable(extendedJavaHome);
+ if (!preInstalledJavaDirectory) {
+ throw new Error(taskLib.loc('JavaNotPreinstalled', versionSpec));
+ }
+ console.log(taskLib.loc('UsePreinstalledJava', preInstalledJavaDirectory));
+ jdkDirectory = JavaFilesExtractor.setJavaHome(preInstalledJavaDirectory, false);
+ } else {
+ if (cleanDestinationDirectory) {
+ cleanFolder(extractLocation);
+ }
+ let jdkFileName: string;
+ if (fromAzure) {
+ // download from azure and save to temporary directory
+ console.log(taskLib.loc('RetrievingJdkFromAzure'));
+ const fileNameAndPath: string = taskLib.getInput('azureCommonVirtualFile', true);
+ const azureDownloader = new AzureStorageArtifactDownloader(
+ taskLib.getInput('azureResourceManagerEndpoint', true),
+ taskLib.getInput('azureStorageAccountName', true),
+ taskLib.getInput('azureContainerName', true),
+ "",
+ taskLib.getInput('azureResourceGroupName', false),
+ );
+ await azureDownloader.downloadArtifacts(extractLocation, '*' + fileNameAndPath);
+ await taskutils.sleepFor(250); //Wait for the file to be released before extracting it.
+ let jdkArchiveName = path.basename(fileNameAndPath);
+ jdkFileName = path.join(extractLocation, jdkArchiveName);
+ toolLib.debug(`jdkFileName: ${jdkFileName}`);
+ } else {
+ // get from local directory
+ console.log(taskLib.loc('RetrievingJdkFromLocalPath'));
+ jdkFileName = taskLib.getInput('jdkFile', true);
+ }
+ compressedFileExtension = JavaFilesExtractor.getSupportedFileEnding(jdkFileName);
+ jdkDirectory = await installJDK(jdkFileName, compressedFileExtension, extractLocation, extendedJavaHome, versionSpec, cleanDestinationDirectory);
+ }
+ console.log(taskLib.loc('SetExtendedJavaHome', extendedJavaHome, jdkDirectory));
+ taskLib.setVariable(extendedJavaHome, jdkDirectory);
+ toolLib.prependPath(path.join(jdkDirectory, BIN_FOLDER));
+}
+
+/**
+ * Delete the contents of the destination directory but leave the directory in place
+ * @param directory Directory path
+ * @returns true if the deletion was successful, false - otherwise
+ */
+function cleanFolder(directory: string): boolean {
+ // Clean the destination folder before downloading and extracting
+ if (taskLib.exist(directory) && taskLib.stats(directory).isDirectory) {
+ console.log(taskLib.loc('CleanDestDir', directory));
+ try {
+ fs.readdirSync(directory)
+ .forEach((item: string) => {
+ const itemPath = path.join(directory, item);
+ taskLib.rmRF(itemPath);
+ });
+ return true;
+ } catch (err) {
+ console.log(taskLib.loc('ErrorCleaningFolder', directory));
+ return false;
+ }
+ }
+}
+
+/**
+ * Install JDK.
+ * @param sourceFile Path to JDK file.
+ * @param fileExtension JDK file extension.
+ * @param archiveExtractLocation Path to folder to extract a JDK.
+ * @returns string
+ */
+async function installJDK(sourceFile: string, fileExtension: string, archiveExtractLocation: string, extendedJavaHome: string, versionSpec: string, cleanDestinationDirectory: boolean): Promise {
+ let jdkDirectory: string;
+ if (fileExtension === '.dmg' && os.platform() === 'darwin') {
+ // Using set because 'includes' array method requires tsconfig option "lib": ["ES2017"]
+ const volumes: Set = new Set(fs.readdirSync(VOLUMES_FOLDER));
+
+ await taskutils.attach(sourceFile);
+
+ const volumePath: string = getVolumePath(volumes);
+
+ const pkgPath: string = getPackagePath(volumePath);
+ try {
+ jdkDirectory = await installPkg(pkgPath, extendedJavaHome, versionSpec);
+ } finally {
+ // In case of an error, there is still a need to detach the disk image
+ await taskutils.detach(volumePath);
+ }
+ }
+ else if (fileExtension === '.pkg' && os.platform() === 'darwin') {
+ jdkDirectory = await installPkg(sourceFile, extendedJavaHome, versionSpec);
+ }
+ else {
+ const createExtractDirectory: boolean = taskLib.getBoolInput('createExtractDirectory', false);
+ let extractionDirectory: string = "";
+ if (createExtractDirectory) {
+ const extractDirectoryName: string = `${extendedJavaHome}_${JavaFilesExtractor.getStrippedName(sourceFile)}_${fileExtension.substr(1)}`;
+ extractionDirectory = path.join(archiveExtractLocation, extractDirectoryName);
+ } else {
+ // we need to remove path separator symbol on the end of archiveExtractLocation path since it could produce issues in getJavaHomeFromStructure method
+ if (archiveExtractLocation.endsWith(path.sep)) {
+ archiveExtractLocation = archiveExtractLocation.slice(0, -1);
+ }
+
+ extractionDirectory = path.normalize(archiveExtractLocation);
+ }
+ // unpack the archive, set `JAVA_HOME` and save it for further processing
+ await unpackArchive(extractionDirectory, sourceFile, fileExtension, cleanDestinationDirectory);
+ jdkDirectory = JavaFilesExtractor.setJavaHome(extractionDirectory);
+ }
+ return jdkDirectory;
+}
+
+/**
+ * Unpack an archive.
+ * @param unpackDir Directory path to unpack files.
+ * @param jdkFileName JDK file name.
+ * @param fileExt JDK file ending.
+ * @param cleanDestinationDirectory Option to clean the destination directory before the JDK is extracted into it.
+ * @returns Promise
+ */
+async function unpackArchive(unpackDir: string, jdkFileName: string, fileExt: string, cleanDestinationDirectory: boolean): Promise {
+ const javaFilesExtractor = new JavaFilesExtractor();
+ if (!cleanDestinationDirectory && taskLib.exist(unpackDir)) {
+ // do nothing since the files were extracted and ready for using
+ console.log(taskLib.loc('ArchiveWasExtractedEarlier'));
+ } else {
+ // unpack files to specified directory
+ console.log(taskLib.loc('ExtractingArchiveToPath', unpackDir));
+ await javaFilesExtractor.unzipJavaDownload(jdkFileName, fileExt, unpackDir);
+ }
+}
+
+/**
+ * Get the path to a folder inside the VOLUMES_FOLDER.
+ * Only for macOS.
+ * @param volumes VOLUMES_FOLDER contents before attaching a disk image.
+ * @returns string
+ */
+function getVolumePath(volumes: Set): string {
+ const newVolumes: string[] = fs.readdirSync(VOLUMES_FOLDER).filter(volume => !volumes.has(volume));
+
+ if (newVolumes.length !== 1) {
+ throw new Error(taskLib.loc('UnsupportedDMGStructure'));
+ }
+ return path.join(VOLUMES_FOLDER, newVolumes[0]);
+}
+
+/**
+ * Get path to a .pkg file.
+ * Only for macOS.
+ * @param volumePath Path to the folder containing a .pkg file.
+ * @returns string
+ */
+function getPackagePath(volumePath: string): string {
+ const packages: string[] = fs.readdirSync(volumePath).filter(file => file.endsWith('.pkg'));
+
+ if (packages.length === 1) {
+ return path.join(volumePath, packages[0]);
+ } else if (packages.length === 0) {
+ throw new Error(taskLib.loc('NoPKGFile'));
+ } else {
+ throw new Error(taskLib.loc('SeveralPKGFiles'));
+ }
+}
+
+/**
+ * Install a .pkg file.
+ * @param pkgPath Path to a .pkg file.
+ * @param extendedJavaHome Extended JAVA_HOME.
+ * @param versionSpec Version of JDK to install.
+ * @returns Promise
+ */
+async function installPkg(pkgPath: string, extendedJavaHome: string, versionSpec: string): Promise {
+ if (!fs.existsSync(pkgPath)) {
+ throw new Error('PkgPathDoesNotExist');
+ }
+
+ console.log(taskLib.loc('InstallJDK'));
+
+ // Using set because 'includes' array method requires tsconfig option "lib": ["ES2017"]
+ const JDKs: Set = new Set(fs.readdirSync(JDK_FOLDER));
+
+ await runPkgInstaller(pkgPath);
+
+ const newJDKs: string[] = fs.readdirSync(JDK_FOLDER).filter(jdkName => !JDKs.has(jdkName));
+
+ let jdkDirectory: string;
+
+ if (newJDKs.length === 0) {
+ const preInstalledJavaDirectory: string | undefined = taskLib.getVariable(extendedJavaHome);
+ if (!preInstalledJavaDirectory) {
+ throw new Error(taskLib.loc('JavaNotPreinstalled', versionSpec));
+ }
+ console.log(taskLib.loc('PreInstalledJavaUpgraded'));
+ console.log(taskLib.loc('UsePreinstalledJava', preInstalledJavaDirectory));
+ jdkDirectory = preInstalledJavaDirectory;
+ } else {
+ console.log(taskLib.loc('JavaSuccessfullyInstalled'));
+ jdkDirectory = path.join(JDK_FOLDER, newJDKs[0], JDK_HOME_FOLDER);
+ }
+
+ return jdkDirectory;
+}
+
+/**
+ * Install a .pkg file.
+ * Only for macOS.
+ * Returns promise with return code.
+ * @param pkgPath Path to a .pkg file.
+ * @returns number
+ */
+async function runPkgInstaller(pkgPath: string): Promise {
+ const installer = taskutils.sudo('installer');
+ installer.line(`-package "${pkgPath}" -target /`);
+ return installer.exec();
+}
+
+run();
diff --git a/_generated/JavaToolInstallerV0/make.json b/_generated/JavaToolInstallerV0/make.json
new file mode 100644
index 000000000000..556b28ffb53f
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/make.json
@@ -0,0 +1,23 @@
+{
+ "externals": {
+ "archivePackages": [
+ {
+ "url": "https://vstsagenttools.blob.core.windows.net/tools/7zip/1/7zip.zip",
+ "dest": "./FileExtractor/"
+ }
+ ]
+ },
+ "rm": [
+ {
+ "items": [
+ "node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib",
+ "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-pipelines-task-lib",
+ "node_modules/azp-tasks-az-blobstorage-provider/node_modules/azure-pipelines-task-lib",
+ "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/vsts-task-lib",
+ "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib",
+ "node_modules/artifact-engine/node_modules/azure-pipelines-task-lib"
+ ],
+ "options": "-Rf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/package-lock.json b/_generated/JavaToolInstallerV0/package-lock.json
new file mode 100644
index 000000000000..d528b73d122a
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/package-lock.json
@@ -0,0 +1,3848 @@
+{
+ "name": "java-tool-installer",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@azure/msal-common": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz",
+ "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw=="
+ },
+ "@azure/msal-node": {
+ "version": "1.14.5",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.5.tgz",
+ "integrity": "sha512-NcVdMfn8Z3ogN+9RjOSF7uwf2Gki5DEJl0BdDSL83KUAgVAobtkZi5W8EqxbJLrTO/ET0jv5DregrcR5qg2pEA==",
+ "requires": {
+ "@azure/msal-common": "^9.0.1",
+ "jsonwebtoken": "^8.5.1",
+ "uuid": "^8.3.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
+ }
+ },
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/jsonwebtoken": {
+ "version": "8.5.9",
+ "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz",
+ "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "16.11.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.60.tgz",
+ "integrity": "sha512-kYIYa1D1L+HDv5M5RXQeEu1o0FKA6yedZIoyugm/MBPROkLpX4L7HRxMrPVyo8bnvjpW/wDlqFNGzXNMb7AdRw=="
+ },
+ "@types/q": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz",
+ "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@types/uuid": {
+ "version": "3.4.10",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz",
+ "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A=="
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "artifact-engine": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/artifact-engine/-/artifact-engine-1.2.0.tgz",
+ "integrity": "sha512-EsLKSNIeZfTks57ek0lR3iJA49hrX4Ju2Qb6CaEzK5uSXX0OXR/iD3Mqstit31UPvXhmG7qcnTFBz4lMswIxIg==",
+ "requires": {
+ "azure-pipelines-task-lib": "^3.4.0",
+ "handlebars": "4.7.7",
+ "minimatch": "^3.0.5",
+ "tunnel": "0.0.4"
+ },
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.17.10",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz",
+ "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw=="
+ },
+ "@babel/core": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz",
+ "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==",
+ "requires": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.18.2",
+ "@babel/helper-compilation-targets": "^7.18.2",
+ "@babel/helper-module-transforms": "^7.18.0",
+ "@babel/helpers": "^7.18.2",
+ "@babel/parser": "^7.18.0",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.2",
+ "@babel/types": "^7.18.2",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz",
+ "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==",
+ "requires": {
+ "@babel/types": "^7.18.2",
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "jsesc": "^2.5.1"
+ },
+ "dependencies": {
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz",
+ "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ }
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz",
+ "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==",
+ "requires": {
+ "@babel/compat-data": "^7.17.10",
+ "@babel/helper-validator-option": "^7.16.7",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz",
+ "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ=="
+ },
+ "@babel/helper-function-name": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
+ "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/types": "^7.17.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
+ "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
+ "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz",
+ "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==",
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/helper-simple-access": "^7.17.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.0",
+ "@babel/types": "^7.18.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz",
+ "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==",
+ "requires": {
+ "@babel/types": "^7.18.2"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
+ "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
+ "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ=="
+ },
+ "@babel/helpers": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz",
+ "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==",
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.2",
+ "@babel/types": "^7.18.2"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.17.12",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz",
+ "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz",
+ "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg=="
+ },
+ "@babel/template": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
+ "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/parser": "^7.16.7",
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz",
+ "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==",
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.18.2",
+ "@babel/helper-environment-visitor": "^7.18.2",
+ "@babel/helper-function-name": "^7.17.9",
+ "@babel/helper-hoist-variables": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/parser": "^7.18.0",
+ "@babel/types": "^7.18.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.2.tgz",
+ "integrity": "sha512-0On6B8A4/+mFUto5WERt3EEuG1NznDirvwca1O8UwXQHVY8g3R7OzYgxXdOfMwLO08UrpUD/2+3Bclyq+/C94Q==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ }
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz",
+ "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz",
+ "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz",
+ "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz",
+ "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==",
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+ "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "requires": {
+ "type-detect": "4.0.8"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
+ }
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
+ "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
+ "requires": {
+ "@sinonjs/commons": "^1.3.0",
+ "array-from": "^2.1.1",
+ "lodash": "^4.17.15"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ=="
+ },
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "2.0.29",
+ "resolved": false,
+ "integrity": "sha1-UALhT3Xi1x5WQoHfBDHIwbSio2o="
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": false,
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/mockery": {
+ "version": "1.4.29",
+ "resolved": false,
+ "integrity": "sha1-m6It838H43gP/4Ux0aOOYz+UV6U="
+ },
+ "@types/node": {
+ "version": "10.17.51",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.51.tgz",
+ "integrity": "sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "@types/xml2js": {
+ "version": "0.4.8",
+ "resolved": false,
+ "integrity": "sha512-EyvT83ezOdec7BhDaEcsklWy7RSIdi6CNe95tmOAK0yx/Lm30C9K75snT3fYayK59ApC2oyW+rcHErdG05FHJA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "append-transform": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
+ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
+ "requires": {
+ "default-require-extensions": "^3.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-from": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
+ "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="
+ },
+ "async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
+ },
+ "browserslist": {
+ "version": "4.20.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
+ "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001332",
+ "electron-to-chromium": "^1.4.118",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.3",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "caching-transform": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
+ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
+ "requires": {
+ "hasha": "^5.0.0",
+ "make-dir": "^3.0.0",
+ "package-hash": "^4.0.0",
+ "write-file-atomic": "^3.0.0"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001342",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001342.tgz",
+ "integrity": "sha512-bn6sOCu7L7jcbBbyNhLg0qzXdJ/PMbybZTH/BA6Roet9wxYRm6Tr9D0s0uhLkOZ6MSG+QU6txUgdpr3MXIVqjA=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "requires": {
+ "assertion-error": "^1.0.1",
+ "deep-eql": "^0.1.3",
+ "type-detect": "^1.0.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ }
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "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"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ }
+ }
+ },
+ "convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "deep-eql": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
+ "requires": {
+ "type-detect": "0.1.1"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+ "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI="
+ }
+ }
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "default-require-extensions": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
+ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
+ "requires": {
+ "strip-bom": "^4.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
+ },
+ "electron-to-chromium": {
+ "version": "1.4.138",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.138.tgz",
+ "integrity": "sha512-IOyp2Seq3w4QLln+yZWcMF3VXhhduz4bwg9gfI+CnP5TkzwNXQ8FCZuwwPsnes73AfWdf5J2n2OXdUwDUspDPQ=="
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
+ },
+ "foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "requires": {
+ "samsam": "1.x"
+ }
+ },
+ "fromentries": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
+ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg=="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "hasha": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
+ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
+ "requires": {
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw=="
+ },
+ "istanbul-lib-hook": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
+ "requires": {
+ "append-transform": "^2.0.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "istanbul-lib-processinfo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
+ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+ "requires": {
+ "archy": "^1.0.0",
+ "cross-spawn": "^7.0.0",
+ "istanbul-lib-coverage": "^3.0.0-alpha.1",
+ "make-dir": "^3.0.0",
+ "p-map": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "uuid": "^3.3.3"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz",
+ "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==",
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
+ "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="
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI="
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "lolex": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.0.tgz",
+ "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg=="
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ },
+ "mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "requires": {
+ "minimist": "^1.2.6"
+ }
+ },
+ "mocha": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
+ "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ }
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
+ }
+ }
+ },
+ "mocha-tap-reporter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/mocha-tap-reporter/-/mocha-tap-reporter-0.1.3.tgz",
+ "integrity": "sha1-Emy70vggZJXnKxWZFNOXuOoXoig=",
+ "requires": {
+ "mocha": "*"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w=="
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE="
+ },
+ "nconf": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz",
+ "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==",
+ "requires": {
+ "async": "^3.0.0",
+ "ini": "^2.0.0",
+ "secure-keys": "^1.0.0",
+ "yargs": "^16.1.1"
+ }
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ },
+ "nise": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz",
+ "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==",
+ "requires": {
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "lolex": "^5.0.1",
+ "path-to-regexp": "^1.7.0"
+ },
+ "dependencies": {
+ "@sinonjs/formatio": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
+ "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
+ "requires": {
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+ "just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg=="
+ },
+ "lolex": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
+ "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ }
+ }
+ },
+ "nock": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/nock/-/nock-9.1.0.tgz",
+ "integrity": "sha512-u9QOLOZP0DlcKzmAzCuX5PRsIhbiRJupR7hJn1cCCT7VW3ZKUrEH/oxGEtVA8Xbu4EmzH9d/VK0x/3FxCGRrRg==",
+ "requires": {
+ "chai": ">=1.9.2 <4.0.0",
+ "debug": "^2.2.0",
+ "deep-equal": "^1.0.0",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "~4.17.2",
+ "mkdirp": "^0.5.0",
+ "propagate": "0.4.0",
+ "qs": "^6.0.2",
+ "semver": "^5.3.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "node-preload": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
+ "requires": {
+ "process-on-spawn": "^1.0.0"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "nyc": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
+ "requires": {
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "caching-transform": "^4.0.0",
+ "convert-source-map": "^1.7.0",
+ "decamelize": "^1.2.0",
+ "find-cache-dir": "^3.2.0",
+ "find-up": "^4.1.0",
+ "foreground-child": "^2.0.0",
+ "get-package-type": "^0.1.0",
+ "glob": "^7.1.6",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-hook": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-processinfo": "^2.0.2",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.2",
+ "make-dir": "^3.0.0",
+ "node-preload": "^0.2.1",
+ "p-map": "^3.0.0",
+ "process-on-spawn": "^1.0.0",
+ "resolve-from": "^5.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "spawn-wrap": "^2.0.0",
+ "test-exclude": "^6.0.0",
+ "yargs": "^15.0.2"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.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": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "package-hash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
+ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
+ "requires": {
+ "graceful-fs": "^4.1.15",
+ "hasha": "^5.0.0",
+ "lodash.flattendeep": "^4.4.0",
+ "release-zalgo": "^1.0.0"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "process-on-spawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
+ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
+ "requires": {
+ "fromentries": "^1.2.0"
+ }
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "propagate": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.4.0.tgz",
+ "integrity": "sha1-8/zKCm/gZzanulcpZgaWF8EwtIE="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ }
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "release-zalgo": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
+ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
+ "requires": {
+ "es6-error": "^4.0.1"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg=="
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "secure-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz",
+ "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o="
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "sinon": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.0.1.tgz",
+ "integrity": "sha512-4qIY0pCWCvGCJpV/1JkFu9kbsNEZ9O34cG1oru/c7OCDtrEs50Gq/VjkA2ID5ZwLyoNx1i1ws118oh/p6fVeDg==",
+ "requires": {
+ "diff": "^3.1.0",
+ "formatio": "1.2.0",
+ "lodash.get": "^4.4.2",
+ "lolex": "^2.1.3",
+ "native-promise-only": "^0.8.1",
+ "nise": "^1.1.1",
+ "path-to-regexp": "^1.7.0",
+ "samsam": "^1.1.3",
+ "text-encoding": "0.6.4",
+ "type-detect": "^4.0.0"
+ },
+ "dependencies": {
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "spawn-wrap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
+ "requires": {
+ "foreground-child": "^2.0.0",
+ "is-windows": "^1.0.2",
+ "make-dir": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "which": "^2.0.1"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk="
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tunnel": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
+ "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM="
+ },
+ "type-detect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI="
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ=="
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "optional": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
+ },
+ "workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw=="
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
+ "xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~9.0.1"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="
+ }
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
+ }
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
+ },
+ "async-mutex": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz",
+ "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
+ },
+ "aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ },
+ "azp-tasks-az-blobstorage-provider": {
+ "version": "2.219.1",
+ "resolved": "https://registry.npmjs.org/azp-tasks-az-blobstorage-provider/-/azp-tasks-az-blobstorage-provider-2.219.1.tgz",
+ "integrity": "sha512-crTVPRVneukXgYNrcznH9jWAtB0K9+Bg19UWzzVl30+Hn5LLlypn6U9uWekj4XV38iiMCR9XwZgw3j+S8Z0h+Q==",
+ "requires": {
+ "artifact-engine": "1.2.0",
+ "azure-pipelines-task-lib": "^3.4.0",
+ "azure-storage": "^2.10.7",
+ "q": "1.4.1"
+ },
+ "dependencies": {
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ }
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ }
+ }
+ },
+ "azure-devops-node-api": {
+ "version": "12.0.0",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.0.0.tgz",
+ "integrity": "sha512-S6Il++7dQeMlZDokBDWw7YVoPeb90tWF10pYxnoauRMnkuL91jq9M7SOYRVhtO3FUC5URPkB/qzGa7jTLft0Xw==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ }
+ }
+ },
+ "azure-pipelines-tasks-azure-arm-rest": {
+ "version": "3.223.6",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.223.6.tgz",
+ "integrity": "sha512-jQeanC/MlqySO3WgUBIxDMDnDG9FnzF1a1qJVSPbPmdKmdIdtFLhuNaB1vxkN1eqgZB6QvpOdY4g3bxQH57Epw==",
+ "requires": {
+ "@azure/msal-node": "1.14.5",
+ "@types/jsonwebtoken": "^8.5.8",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.17.0",
+ "@types/q": "1.5.4",
+ "async-mutex": "^0.4.0",
+ "azure-devops-node-api": "^12.0.0",
+ "azure-pipelines-task-lib": "^3.4.0",
+ "https-proxy-agent": "^4.0.0",
+ "jsonwebtoken": "^8.5.1",
+ "node-fetch": "^2.6.7",
+ "q": "1.5.1",
+ "typed-rest-client": "1.8.4",
+ "xml2js": "0.4.13"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "xml2js": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.13.tgz",
+ "integrity": "sha512-BoxD65qWA2p4znzbaati/Td19uFEc0X6ydj0bFphJO62RrNaGqOyW6ljLWPo3GKDbvW/6dnxAoRX01BsgEWsMA==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": ">=2.4.6"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-utility-common": {
+ "version": "3.210.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.210.0.tgz",
+ "integrity": "sha512-tQ1dRjreZqkH6s0X/TN3NS4uFgirL88E6CO185kLtJS+WsAC+HlNmtkO8PrzMATr41gZWSuNCyLTHPmZ7NeKNg==",
+ "requires": {
+ "@types/node": "^10.17.0",
+ "azure-pipelines-task-lib": "^3.1.0",
+ "azure-pipelines-tool-lib": "^1.0.2",
+ "js-yaml": "3.13.1",
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.3.1.tgz",
+ "integrity": "sha512-56ZAr4MHIoa24VNVuwPL4iUQ5MKaigPoYXkBG8E8fiVmh8yZdatUo25meNoQwg77vDY22F63Q44UzXoMWmy7ag==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^1.7.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-1.3.2.tgz",
+ "integrity": "sha512-PtYcd3E2ouwZhLuaOpWA00FYoLjRuJs1V8mNu3u6lBnqeYd4jh/8VL/of6nchm8f2NM6Div+EEnbOcmWvcptPg==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^3.1.10",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
+ "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.0-preview",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.0-preview.tgz",
+ "integrity": "sha512-OeivwKLpLMsvGpZ2H+2UPxFwwqNkV8TzfKByqjYAllzGDAw4BvciAdjCMwkpGdTOnzfPbRpr33sy48kn7RqfKA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.9",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.9.tgz",
+ "integrity": "sha512-uSmjE38B80wjL85UFX3sTYEUlvZ1JgCRhsWj/fJ4rZ0FqDUFoIuodtiVeE+cUqiVTOKPdKrp/sdftD15MDek6g==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ }
+ }
+ },
+ "azure-storage": {
+ "version": "2.10.7",
+ "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.10.7.tgz",
+ "integrity": "sha512-4oeFGtn3Ziw/fGs/zkoIpKKtygnCVIcZwzJ7UQzKTxhkGQqVCByOFbYqMGYR3L+wOsunX9lNfD0jc51SQuKSSA==",
+ "requires": {
+ "browserify-mime": "^1.2.9",
+ "extend": "^3.0.2",
+ "json-edm-parser": "~0.1.2",
+ "json-schema": "~0.4.0",
+ "md5.js": "^1.3.4",
+ "readable-stream": "^2.0.0",
+ "request": "^2.86.0",
+ "underscore": "^1.12.1",
+ "uuid": "^3.0.0",
+ "validator": "^13.7.0",
+ "xml2js": "~0.2.8",
+ "xmlbuilder": "^9.0.7"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browserify-mime": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz",
+ "integrity": "sha512-uz+ItyJXBLb6wgon1ELEiVowJBEsy03PUWGRQU7cxxx9S+DW2hujPp+DaMYEOClRPzsn7NB99NtJ6pGnt8y+CQ=="
+ },
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "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": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
+ "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ }
+ }
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "requires": {
+ "agent-base": "5",
+ "debug": "4"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+ },
+ "json-edm-parser": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz",
+ "integrity": "sha512-J1U9mk6lf8dPULcaMwALXB6yel3cJyyhk9Z8FQ4sMwiazNwjaUhegIcpZyZFNMvLRtnXwh+TkCjX9uYUObBBYA==",
+ "requires": {
+ "jsonparse": "~1.2.0"
+ }
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "jsonparse": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz",
+ "integrity": "sha512-LkDEYtKnPFI9hQ/IURETe6F1dUH80cbRkaF6RaViSwoSNPwaxQpi6TgJGvJKyLQ2/9pQW+XCxK3hBoR44RAjkg=="
+ },
+ "jsonwebtoken": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
+ "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+ "requires": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "requires": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
+ },
+ "lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
+ },
+ "lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
+ },
+ "lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-1.7.0.tgz",
+ "integrity": "sha512-gUQA33ayi0tuAhr/rJNZPr7Q7uvlBt4gyJPbi0CDcAfIzIrDu1YgGMFgmAu3stJqBpK57m7+RxUbcS+pt59fKQ=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "node-fetch": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz",
+ "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
+ "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.2.0.tgz",
+ "integrity": "sha512-+CMAlLHqwRYwBMXKCP+o8ns7DN+xHDUiI+0nArsiJ9y+kJVPLFxEaSw6Ha9s9H0tftxg2Yzl25wqj9G7m5wLZg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg=="
+ },
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "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.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "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==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sax": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+ "integrity": "sha512-c0YL9VcSfcdH3F1Qij9qpYJFpKFKMXNOkLWFssBL3RuF7ZS8oZhllR2rWlCRjDTJsfq3R6wbSsaRU6o0rkEdNw=="
+ },
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "tslib": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz",
+ "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w=="
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz",
+ "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "validator": {
+ "version": "13.9.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz",
+ "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ }
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "xml2js": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz",
+ "integrity": "sha512-ZHZBIAO55GHCn2jBYByVPHvHS+o3j8/a/qmpEe6kxO3cTnTCWC3Htq9RYJ5G4XMwMMClD2QkXA9SNdPadLyn3Q==",
+ "requires": {
+ "sax": "0.5.x"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ=="
+ }
+ }
+}
diff --git a/_generated/JavaToolInstallerV0/package.json b/_generated/JavaToolInstallerV0/package.json
new file mode 100644
index 000000000000..114e3064573d
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "java-tool-installer",
+ "private": "true",
+ "description": "Java Tool Installer",
+ "main": "javaToolInstaller.js",
+ "scripts": {
+ "build": "node ../../make.js build --task JavaToolInstallerV0",
+ "test": "node ../../make.js test --task JavaToolInstallerV0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "keywords": [
+ "Azure",
+ "Pipelines",
+ "Tasks",
+ "Java"
+ ],
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^16.11.59",
+ "@types/q": "^1.0.7",
+ "agent-base": "^6.0.2",
+ "azp-tasks-az-blobstorage-provider": "^2.219.1",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0",
+ "azure-pipelines-tasks-azure-arm-rest": "3.223.6",
+ "azure-pipelines-tasks-utility-common": "^3.0.3",
+ "azure-pipelines-tool-lib": "^2.0.0-preview"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/_generated/JavaToolInstallerV0/task.json b/_generated/JavaToolInstallerV0/task.json
new file mode 100644
index 000000000000..b9ca77004c2a
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/task.json
@@ -0,0 +1,235 @@
+{
+ "id": "C0E0B74F-0931-47C7-AC27-7C5A19456A36",
+ "name": "JavaToolInstaller",
+ "friendlyName": "Java tool installer",
+ "description": "Acquire a specific version of Java from a user-supplied Azure blob or the tool cache and sets JAVA_HOME",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/java-tool-installer",
+ "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=875287) or [see the Java documentation](https://docs.oracle.com/java/)",
+ "category": "Tool",
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 0,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "satisfies": [
+ "Java",
+ "JDK"
+ ],
+ "demands": [],
+ "groups": [
+ {
+ "name": "JavaInAzureGroup",
+ "displayName": "Download Java from an Azure blob",
+ "isExpanded": true
+ }
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "Use Java $(versionSpec)",
+ "inputs": [
+ {
+ "name": "versionSpec",
+ "type": "string",
+ "label": "JDK version",
+ "defaultValue": "8",
+ "required": true,
+ "helpMarkDown": "A number that specifies the JDK version to make available on the path. Use a whole number version, such as 10"
+ },
+ {
+ "name": "jdkArchitectureOption",
+ "type": "pickList",
+ "label": "JDK architecture",
+ "options": {
+ "x64": "X64",
+ "x86": "X86"
+ },
+ "required": true,
+ "helpMarkDown": "The architecture (x86, x64) of the JDK."
+ },
+ {
+ "name": "jdkSourceOption",
+ "type": "pickList",
+ "label": "JDK source",
+ "required": true,
+ "options": {
+ "AzureStorage": "Azure Storage",
+ "LocalDirectory": "Local Directory",
+ "PreInstalled": "Pre-installed"
+ },
+ "helpMarkDown": "Source for the compressed JDK."
+ },
+ {
+ "name": "jdkFile",
+ "type": "filePath",
+ "label": "JDK file",
+ "required": true,
+ "visibleRule": "jdkSourceOption == LocalDirectory",
+ "helpMarkDown": "Path to where the compressed JDK is located. The path could be in your source repository or a local path on the agent."
+ },
+ {
+ "name": "azureResourceManagerEndpoint",
+ "type": "connectedService:AzureRM",
+ "label": "Azure subscription",
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Choose the Azure Resource Manager subscription for the JDK."
+ },
+ {
+ "name": "azureStorageAccountName",
+ "type": "pickList",
+ "label": "Storage account name",
+ "required": true,
+ "properties": {
+ "EditableOptions": "True"
+ },
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Azure Classic and Resource Manager storage accounts are listed. Select the storage account name in which the JDK is located."
+ },
+ {
+ "name": "azureContainerName",
+ "type": "pickList",
+ "label": "Container name",
+ "properties": {
+ "EditableOptions": "True"
+ },
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Name of the container in the storage account in which the JDK is located."
+ },
+ {
+ "name": "azureCommonVirtualFile",
+ "type": "string",
+ "label": "Common virtual path",
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Path to the JDK inside the Azure storage container."
+ },
+ {
+ "name": "jdkDestinationDirectory",
+ "type": "filePath",
+ "label": "Destination directory",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "On Linux and Windows, this is used as the destination directory for JDK installation. On macOS, this directory is used as a temporary folder for extracting of .dmg's since macOS doesn't support installing of JDK to specific directory."
+ },
+ {
+ "name": "azureResourceGroupName",
+ "type": "string",
+ "label": "Resource Group name",
+ "required": false,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Resource Group name of the storage account."
+ },
+ {
+ "name": "cleanDestinationDirectory",
+ "type": "boolean",
+ "label": "Clean destination directory",
+ "required": true,
+ "defaultValue": "true",
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "Select this option to clean the destination directory before JDK is extracted into it."
+ },
+ {
+ "name": "createExtractDirectory",
+ "type": "boolean",
+ "label": "Create directory for extracting",
+ "required": false,
+ "defaultValue": true,
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "By default, task is creating a directory similar to this JAVA_HOME_8_X64_OpenJDK_zip for extracting JDK. This option allows to disable creation of this folder, in this case, JDK will be located in the root of jdkDestinationDirectory"
+ }
+ ],
+ "dataSourceBindings": [
+ {
+ "endpointId": "$(azureResourceManagerEndpoint)",
+ "target": "azureStorageAccountName",
+ "dataSourceName": "AzureStorageAccountRMandClassic"
+ },
+ {
+ "target": "azureContainerName",
+ "endpointId": "$(azureResourceManagerEndpoint)",
+ "dataSourceName": "AzureStorageContainer",
+ "resultTemplate": "{ \"Value\" : \"{{ Name }}\", \"DisplayValue\" : \"{{ Name }}\" }",
+ "parameters": {
+ "storageAccount": "$(azureStorageAccountName)"
+ }
+ }
+ ],
+ "execution": {
+ "Node10": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "PATH",
+ "JAVA_HOME*"
+ ]
+ }
+ },
+ "messages": {
+ "DownloadFromAzureBlobStorage": "Downloading artifacts from Azure blob storage, Container Name: %s",
+ "SuccessFullyFetchedItemList": "Successfully fetched list of items",
+ "StorageAccountDoesNotExist": "Failed to get azure storage account with name %s.",
+ "RequestedUrlTooLong": "Requested URL is too long, this usually happen when you have a lot of Resource Groups in the subscription, try to set azureResourceGroupName input.",
+ "UnzipExtractFile": "Extracting file: %s",
+ "SevenZipExtractFile": "Extracting file: %s",
+ "TarExtractFile": "Extracting file: %s",
+ "ExtractFileFailedMsg": "Extraction failed for file: %s \ncode: %d \nstdout: %s \nstderr: %s \nerror: %s;",
+ "ExtractNonExistFile": "Extraction failed for file: %s because it does not exist.",
+ "ExtractDirFailed": "Extraction failed for file: %s because it is a directory.",
+ "CreateTempDir": "Creating temp folder: %s to decompress: %s",
+ "TempDir": "tempFolder = %s",
+ "DecompressedTempTar": "Decompressed temporary tar from: %s to: %s",
+ "RemoveTempDir": "Removing temp folder: %s",
+ "ExtractFailedCannotCreate": "Extraction failed for file: %s because temporary location could not be created: %s",
+ "CleanDestDir": "Cleaning destination folder before extraction: %s",
+ "CreateDestDir": "Creating destination folder: %s",
+ "RetrievingJdkFromAzure": "Retrieving the JDK from Azure blob storage.",
+ "RetrievingJdkFromLocalPath": "Retrieving the JDK from local path.",
+ "SucceedMsg": "Successfully extracted all files.",
+ "SetJavaHome": "JAVA_HOME is being set to: %s",
+ "SetExtendedJavaHome": "%s is being set to: %s",
+ "UnsupportedFileExtension": "Specified JDK source file does not have a supported file extension.",
+ "CouldNotFetchAccessTokenforAzureStatusCode": "Could not fetch access token for Azure. Status code: %s, status message: %s",
+ "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not fetch access token for Managed Service Principal. Please configure Managed Service Identity (MSI) for virtual machine 'https://aka.ms/azure-msi-docs'. Status code: %s, status message: %s",
+ "CouldNotFetchAccessTokenforMSIStatusCode": "Could not fetch access token for Managed Service Principal. Status code: %s, status message: %s",
+ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.",
+ "CorrelationIdForARM": "Correlation ID from ARM api call response : %s",
+ "JavaNotPreinstalled": "Java %s is not preinstalled on this agent",
+ "UsePreinstalledJava": "Use preinstalled JDK from %s",
+ "WrongArchiveStructure": "JDK file is not valid. Verify if JDK file contains only one root folder with 'bin' inside.",
+ "WrongArchiveFile": "Archive file is wrong. There is not any folder which contains JDK",
+ "ShareAccessError": "Network shared resource not available: (%s)",
+ "UnsupportedDMGStructure": "JDK file is not supported. Verify if JDK file contains exactly one folder inside.",
+ "NoPKGFile": "Could not find PKG file.",
+ "SeveralPKGFiles": "Found more than one PKG files.",
+ "InstallJDK": "Installing JDK.",
+ "AttachDiskImage": "Attaching a disk image.",
+ "DetachDiskImage": "Detaching a disk image.",
+ "PkgPathDoesNotExist": "Package path does not exist.",
+ "PreInstalledJavaUpgraded": "Preinstalled JDK updated.",
+ "JavaSuccessfullyInstalled": "Java has been successfully installed",
+ "ArchiveWasExtractedEarlier": "Archive with JDK was extracted earlier - skipping extracting",
+ "ExtractingArchiveToPath": "Extracting archive to: %s",
+ "ErrorCleaningFolder": "Folder cleaning error: %s"
+ },
+ "_buildConfigMapping": {
+ "Default": "0.229.3",
+ "Node20-225": "0.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/task.loc.json b/_generated/JavaToolInstallerV0/task.loc.json
new file mode 100644
index 000000000000..b89804c9e479
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/task.loc.json
@@ -0,0 +1,235 @@
+{
+ "id": "C0E0B74F-0931-47C7-AC27-7C5A19456A36",
+ "name": "JavaToolInstaller",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/java-tool-installer",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Tool",
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 0,
+ "Minor": 229,
+ "Patch": 3
+ },
+ "satisfies": [
+ "Java",
+ "JDK"
+ ],
+ "demands": [],
+ "groups": [
+ {
+ "name": "JavaInAzureGroup",
+ "displayName": "ms-resource:loc.group.displayName.JavaInAzureGroup",
+ "isExpanded": true
+ }
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "inputs": [
+ {
+ "name": "versionSpec",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.versionSpec",
+ "defaultValue": "8",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.versionSpec"
+ },
+ {
+ "name": "jdkArchitectureOption",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.jdkArchitectureOption",
+ "options": {
+ "x64": "X64",
+ "x86": "X86"
+ },
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.jdkArchitectureOption"
+ },
+ {
+ "name": "jdkSourceOption",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.jdkSourceOption",
+ "required": true,
+ "options": {
+ "AzureStorage": "Azure Storage",
+ "LocalDirectory": "Local Directory",
+ "PreInstalled": "Pre-installed"
+ },
+ "helpMarkDown": "ms-resource:loc.input.help.jdkSourceOption"
+ },
+ {
+ "name": "jdkFile",
+ "type": "filePath",
+ "label": "ms-resource:loc.input.label.jdkFile",
+ "required": true,
+ "visibleRule": "jdkSourceOption == LocalDirectory",
+ "helpMarkDown": "ms-resource:loc.input.help.jdkFile"
+ },
+ {
+ "name": "azureResourceManagerEndpoint",
+ "type": "connectedService:AzureRM",
+ "label": "ms-resource:loc.input.label.azureResourceManagerEndpoint",
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureResourceManagerEndpoint"
+ },
+ {
+ "name": "azureStorageAccountName",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.azureStorageAccountName",
+ "required": true,
+ "properties": {
+ "EditableOptions": "True"
+ },
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureStorageAccountName"
+ },
+ {
+ "name": "azureContainerName",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.azureContainerName",
+ "properties": {
+ "EditableOptions": "True"
+ },
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureContainerName"
+ },
+ {
+ "name": "azureCommonVirtualFile",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.azureCommonVirtualFile",
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureCommonVirtualFile"
+ },
+ {
+ "name": "jdkDestinationDirectory",
+ "type": "filePath",
+ "label": "ms-resource:loc.input.label.jdkDestinationDirectory",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "ms-resource:loc.input.help.jdkDestinationDirectory"
+ },
+ {
+ "name": "azureResourceGroupName",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.azureResourceGroupName",
+ "required": false,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureResourceGroupName"
+ },
+ {
+ "name": "cleanDestinationDirectory",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.cleanDestinationDirectory",
+ "required": true,
+ "defaultValue": "true",
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "ms-resource:loc.input.help.cleanDestinationDirectory"
+ },
+ {
+ "name": "createExtractDirectory",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.createExtractDirectory",
+ "required": false,
+ "defaultValue": true,
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "ms-resource:loc.input.help.createExtractDirectory"
+ }
+ ],
+ "dataSourceBindings": [
+ {
+ "endpointId": "$(azureResourceManagerEndpoint)",
+ "target": "azureStorageAccountName",
+ "dataSourceName": "AzureStorageAccountRMandClassic"
+ },
+ {
+ "target": "azureContainerName",
+ "endpointId": "$(azureResourceManagerEndpoint)",
+ "dataSourceName": "AzureStorageContainer",
+ "resultTemplate": "{ \"Value\" : \"{{ Name }}\", \"DisplayValue\" : \"{{ Name }}\" }",
+ "parameters": {
+ "storageAccount": "$(azureStorageAccountName)"
+ }
+ }
+ ],
+ "execution": {
+ "Node10": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "PATH",
+ "JAVA_HOME*"
+ ]
+ }
+ },
+ "messages": {
+ "DownloadFromAzureBlobStorage": "ms-resource:loc.messages.DownloadFromAzureBlobStorage",
+ "SuccessFullyFetchedItemList": "ms-resource:loc.messages.SuccessFullyFetchedItemList",
+ "StorageAccountDoesNotExist": "ms-resource:loc.messages.StorageAccountDoesNotExist",
+ "RequestedUrlTooLong": "ms-resource:loc.messages.RequestedUrlTooLong",
+ "UnzipExtractFile": "ms-resource:loc.messages.UnzipExtractFile",
+ "SevenZipExtractFile": "ms-resource:loc.messages.SevenZipExtractFile",
+ "TarExtractFile": "ms-resource:loc.messages.TarExtractFile",
+ "ExtractFileFailedMsg": "ms-resource:loc.messages.ExtractFileFailedMsg",
+ "ExtractNonExistFile": "ms-resource:loc.messages.ExtractNonExistFile",
+ "ExtractDirFailed": "ms-resource:loc.messages.ExtractDirFailed",
+ "CreateTempDir": "ms-resource:loc.messages.CreateTempDir",
+ "TempDir": "ms-resource:loc.messages.TempDir",
+ "DecompressedTempTar": "ms-resource:loc.messages.DecompressedTempTar",
+ "RemoveTempDir": "ms-resource:loc.messages.RemoveTempDir",
+ "ExtractFailedCannotCreate": "ms-resource:loc.messages.ExtractFailedCannotCreate",
+ "CleanDestDir": "ms-resource:loc.messages.CleanDestDir",
+ "CreateDestDir": "ms-resource:loc.messages.CreateDestDir",
+ "RetrievingJdkFromAzure": "ms-resource:loc.messages.RetrievingJdkFromAzure",
+ "RetrievingJdkFromLocalPath": "ms-resource:loc.messages.RetrievingJdkFromLocalPath",
+ "SucceedMsg": "ms-resource:loc.messages.SucceedMsg",
+ "SetJavaHome": "ms-resource:loc.messages.SetJavaHome",
+ "SetExtendedJavaHome": "ms-resource:loc.messages.SetExtendedJavaHome",
+ "UnsupportedFileExtension": "ms-resource:loc.messages.UnsupportedFileExtension",
+ "CouldNotFetchAccessTokenforAzureStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforAzureStatusCode",
+ "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode",
+ "CouldNotFetchAccessTokenforMSIStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIStatusCode",
+ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal",
+ "CorrelationIdForARM": "ms-resource:loc.messages.CorrelationIdForARM",
+ "JavaNotPreinstalled": "ms-resource:loc.messages.JavaNotPreinstalled",
+ "UsePreinstalledJava": "ms-resource:loc.messages.UsePreinstalledJava",
+ "WrongArchiveStructure": "ms-resource:loc.messages.WrongArchiveStructure",
+ "WrongArchiveFile": "ms-resource:loc.messages.WrongArchiveFile",
+ "ShareAccessError": "ms-resource:loc.messages.ShareAccessError",
+ "UnsupportedDMGStructure": "ms-resource:loc.messages.UnsupportedDMGStructure",
+ "NoPKGFile": "ms-resource:loc.messages.NoPKGFile",
+ "SeveralPKGFiles": "ms-resource:loc.messages.SeveralPKGFiles",
+ "InstallJDK": "ms-resource:loc.messages.InstallJDK",
+ "AttachDiskImage": "ms-resource:loc.messages.AttachDiskImage",
+ "DetachDiskImage": "ms-resource:loc.messages.DetachDiskImage",
+ "PkgPathDoesNotExist": "ms-resource:loc.messages.PkgPathDoesNotExist",
+ "PreInstalledJavaUpgraded": "ms-resource:loc.messages.PreInstalledJavaUpgraded",
+ "JavaSuccessfullyInstalled": "ms-resource:loc.messages.JavaSuccessfullyInstalled",
+ "ArchiveWasExtractedEarlier": "ms-resource:loc.messages.ArchiveWasExtractedEarlier",
+ "ExtractingArchiveToPath": "ms-resource:loc.messages.ExtractingArchiveToPath",
+ "ErrorCleaningFolder": "ms-resource:loc.messages.ErrorCleaningFolder"
+ },
+ "_buildConfigMapping": {
+ "Default": "0.229.3",
+ "Node20-225": "0.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0/taskutils.ts b/_generated/JavaToolInstallerV0/taskutils.ts
new file mode 100644
index 000000000000..9cd9571b4e81
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/taskutils.ts
@@ -0,0 +1,57 @@
+import * as tl from 'azure-pipelines-task-lib/task';
+import * as os from 'os';
+
+import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner';
+
+/**
+ * Returns promise which will be resolved in given number of milliseconds.
+ * @param sleepDurationInMilliSeconds Number of milliseconds.
+ * @returns Promise
+ */
+export function sleepFor(sleepDurationInMilliSeconds: number): Promise {
+ return new Promise((resolve, reject) => {
+ setTimeout(resolve, sleepDurationInMilliSeconds);
+ });
+}
+
+/**
+ * Run a tool with `sudo` on Linux and macOS.
+ * Precondition: `toolName` executable is in PATH.
+ * @returns ToolRunner
+ */
+export function sudo(toolName: string): ToolRunner {
+ if (os.platform() === 'win32') {
+ return tl.tool(toolName);
+ } else {
+ const toolPath = tl.which(toolName);
+ return tl.tool('sudo').line(toolPath);
+ }
+}
+
+/**
+ * Attach a disk image.
+ * Only for macOS.
+ * Returns promise with return code.
+ * @param sourceFile Path to a disk image file.
+ * @returns number
+ */
+export async function attach(sourceFile: string): Promise {
+ console.log(tl.loc('AttachDiskImage'));
+ const hdiutil = sudo('hdiutil');
+ hdiutil.line(`attach "${sourceFile}"`);
+ return hdiutil.exec();
+}
+
+/**
+ * Detach a disk image.
+ * Only for macOS.
+ * Returns promise with return code.
+ * @param volumePath Path to the attached disk image.
+ * @returns number
+ */
+export async function detach(volumePath: string): Promise {
+ console.log(tl.loc('DetachDiskImage'));
+ const hdiutil = sudo('hdiutil');
+ hdiutil.line(`detach "${volumePath}"`);
+ return hdiutil.exec();
+}
diff --git a/_generated/JavaToolInstallerV0/tsconfig.json b/_generated/JavaToolInstallerV0/tsconfig.json
new file mode 100644
index 000000000000..875bb90cd697
--- /dev/null
+++ b/_generated/JavaToolInstallerV0/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs"
+ }
+}
diff --git a/_generated/JavaToolInstallerV0_Node20/.npmrc b/_generated/JavaToolInstallerV0_Node20/.npmrc
new file mode 100644
index 000000000000..5fca0d518be7
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/.npmrc
@@ -0,0 +1 @@
+scripts-prepend-node-path=true
diff --git a/_generated/JavaToolInstallerV0_Node20/AzureStorageArtifacts/AzureStorageArtifactDownloader.ts b/_generated/JavaToolInstallerV0_Node20/AzureStorageArtifacts/AzureStorageArtifactDownloader.ts
new file mode 100644
index 000000000000..f90cf5d84970
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/AzureStorageArtifacts/AzureStorageArtifactDownloader.ts
@@ -0,0 +1,124 @@
+import * as tl from 'azure-pipelines-task-lib/task';
+import msRestAzure = require('azure-pipelines-tasks-azure-arm-rest/azure-arm-common');
+import Model = require('azure-pipelines-tasks-azure-arm-rest/azureModels');
+import armStorage = require('azure-pipelines-tasks-azure-arm-rest/azure-arm-storage');
+import BlobService = require('azp-tasks-az-blobstorage-provider/blobservice');
+import { AzureEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azureModels';
+import { AzureRMEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-endpoint';
+
+export class AzureStorageArtifactDownloader {
+ public connectedService: string;
+ public azureStorageAccountName: string;
+ public azureResourceGroupName?: string;
+ public containerName: string;
+ public commonVirtualPath: string;
+
+
+ constructor(connectedService: string, azureStorageAccountName: string, containerName: string, commonVirtualPath: string, azureResourceGroupName?: string) {
+ this.connectedService = connectedService;
+ this.azureStorageAccountName = azureStorageAccountName;
+ this.azureResourceGroupName = azureResourceGroupName;
+ this.containerName = containerName;
+ this.commonVirtualPath = commonVirtualPath;
+ }
+
+ public async downloadArtifacts(downloadToPath: string, fileType: string): Promise {
+ try {
+ console.log(tl.loc('DownloadFromAzureBlobStorage', this.containerName));
+
+ const storageAccount: StorageAccountInfo = await this._getStorageAccountDetails();
+
+ const blobService = new BlobService.BlobService(storageAccount.name, storageAccount.primaryAccessKey);
+
+ await blobService.downloadBlobs(downloadToPath, this.containerName, this.commonVirtualPath, fileType || "**");
+
+ } catch (e) {
+ if (e.statusCode === 414) throw new Error(tl.loc('RequestedUrlTooLong'));
+ throw e;
+ }
+ }
+
+ private async _getStorageAccountDetails(): Promise {
+ tl.debug("Getting storage account details for " + this.azureStorageAccountName);
+
+ const subscriptionId: string = tl.getEndpointDataParameter(this.connectedService, "subscriptionId", false);
+ const credentials = await this._getARMCredentials();
+ const storageArmClient = new armStorage.StorageManagementClient(credentials, subscriptionId);
+
+ const isUseOldStorageAccountQuery = process.env.AZP_TASK_FF_JAVATOOLINSTALLER_USE_OLD_SA_QUERY
+ ? !!process.env.AZP_TASK_FF_JAVATOOLINSTALLER_USE_OLD_SA_QUERY
+ : false;
+
+ let storageAccount = null;
+ if (this.azureResourceGroupName) {
+ tl.debug("Group name is provided. Using fast query to get storage account details.");
+ storageAccount = await this._getStorageAccountWithResourceGroup(storageArmClient, this.azureResourceGroupName, this.azureStorageAccountName);
+ }
+
+ if (!storageAccount) {
+ tl.debug("Group name is not provided or fast query failed. Using legacy query to get storage account details.");
+ storageAccount = isUseOldStorageAccountQuery
+ ? await this._legacyGetStorageAccount(storageArmClient)
+ : await this._getStorageAccount(storageArmClient);
+
+ }
+
+ const storageAccountResourceGroupName = armStorage.StorageAccounts.getResourceGroupNameFromUri(storageAccount.id);
+
+ tl.debug("Listing storage access keys...");
+ const accessKeys = await storageArmClient.storageAccounts.listKeys(storageAccountResourceGroupName, this.azureStorageAccountName, null, storageAccount.type);
+
+ return {
+ name: this.azureStorageAccountName,
+ resourceGroupName: storageAccountResourceGroupName,
+ primaryAccessKey: accessKeys[0]
+ }
+ }
+
+ private async _legacyGetStorageAccount(storageArmClient: armStorage.StorageManagementClient): Promise {
+ const storageAccounts = await storageArmClient.storageAccounts.listClassicAndRMAccounts(null);
+ const index = storageAccounts.findIndex(account => account.name.toLowerCase() == this.azureStorageAccountName.toLowerCase());
+ if (index < 0) {
+ throw new Error(tl.loc("StorageAccountDoesNotExist", this.azureStorageAccountName));
+ }
+
+ return storageAccounts[index];
+ }
+
+ private async _getStorageAccount(storageArmClient: armStorage.StorageManagementClient): Promise {
+ const storageAccount = await storageArmClient.storageAccounts.getClassicOrArmAccountByName(this.azureStorageAccountName, null);
+
+ if (!storageAccount) {
+ throw new Error(tl.loc('StorageAccountDoesNotExist', this.azureStorageAccountName));
+ }
+
+ return storageAccount;
+ }
+
+ private async _getStorageAccountWithResourceGroup(storageArmClient: armStorage.StorageManagementClient, resourceGroupName: string, storageAccountName: string): Promise {
+ let storageAccount = undefined;
+
+ try {
+ storageAccount = await storageArmClient.storageAccounts.getStorageAccountProperties(resourceGroupName, storageAccountName);
+ } catch (e) {
+ tl.warning("Failed to get storage account details using fast query.");
+ }
+
+ if (storageAccount) {
+ tl.debug("Found storage account details using fast query.");
+ }
+
+ return storageAccount;
+ }
+
+ private async _getARMCredentials(): Promise {
+ const endpoint: AzureEndpoint = await new AzureRMEndpoint(this.connectedService).getEndpoint();
+ return endpoint.applicationTokenCredentials;
+ }
+}
+
+interface StorageAccountInfo {
+ name: string;
+ resourceGroupName: string;
+ primaryAccessKey: string;
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/FileExtractor/JavaFilesExtractor.ts b/_generated/JavaToolInstallerV0_Node20/FileExtractor/JavaFilesExtractor.ts
new file mode 100644
index 000000000000..5e03522e52e5
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/FileExtractor/JavaFilesExtractor.ts
@@ -0,0 +1,259 @@
+import * as fs from 'fs';
+import * as os from 'os';
+import * as path from 'path';
+import * as taskLib from 'azure-pipelines-task-lib/task';
+import * as toolLib from 'azure-pipelines-tool-lib/tool';
+
+const supportedFileEndings: string[] = ['.tar', '.tar.gz', '.zip', '.7z', '.dmg', '.pkg'];
+
+export const BIN_FOLDER: string = 'bin';
+
+interface IDirectoriesDictionary {
+ [key: string]: null
+}
+
+export class JavaFilesExtractor {
+ private readonly ERR_SHARE_ACCESS = -4094;
+ public destinationFolder: string;
+ public readonly win: boolean;
+
+ // 7zip
+ public xpSevenZipLocation: string;
+ public winSevenZipLocation: string = path.join(__dirname, '7zip/7z.exe');
+
+ constructor() {
+ this.win = (os.platform() === 'win32');
+ taskLib.debug('win: ' + this.win);
+ }
+
+ private getSevenZipLocation(): string {
+ if (this.win) {
+ return this.winSevenZipLocation;
+ } else {
+ if (typeof this.xpSevenZipLocation === "undefined") {
+ this.xpSevenZipLocation = taskLib.which('7z', true);
+ }
+ return this.xpSevenZipLocation;
+ }
+ }
+
+ private static isTar(file: string): boolean {
+ const name: string = file.toLowerCase();
+ // standard gnu-tar extension formats with recognized auto compression formats
+ // https://www.gnu.org/software/tar/manual/html_section/tar_69.html
+ return name.endsWith('.tar') // no compression
+ || name.endsWith('.tar.gz') // gzip
+ || name.endsWith('.tgz') // gzip
+ || name.endsWith('.taz') // gzip
+ || name.endsWith('.tar.z') // compress
+ || name.endsWith('.tar.bz2') // bzip2
+ || name.endsWith('.tz2') // bzip2
+ || name.endsWith('.tbz2') // bzip2
+ || name.endsWith('.tbz') // bzip2
+ || name.endsWith('.tar.lz') // lzip
+ || name.endsWith('.tar.lzma') // lzma
+ || name.endsWith('.tlz') // lzma
+ || name.endsWith('.tar.lzo') // lzop
+ || name.endsWith('.tar.xz') // xz
+ || name.endsWith('.txz'); // xz
+ }
+
+ private sevenZipExtract(file: string, destinationFolder: string) {
+ //We have to create our own 7Zip extract function as the vsts-task-tool-lib
+ //method uses 7zDec, which only decodes .7z archives
+ console.log(taskLib.loc('SevenZipExtractFile', file));
+ const sevenZip = taskLib.tool(this.getSevenZipLocation());
+ sevenZip.arg('x');
+ sevenZip.arg('-o' + destinationFolder);
+ sevenZip.arg(file);
+ const execResult = sevenZip.execSync();
+ if (execResult.code != taskLib.TaskResult.Succeeded) {
+ taskLib.debug('execResult: ' + JSON.stringify(execResult));
+ }
+ }
+
+ /**
+ * Get file ending if it is supported. Otherwise throw an error.
+ * Find file ending, not extension. For example, there is supported .tar.gz file ending but the extension is .gz.
+ * @param file Path to a file.
+ * @returns string
+ */
+ public static getSupportedFileEnding(file: string): string {
+ const fileEnding: string = supportedFileEndings.find(ending => file.endsWith(ending));
+
+ if (fileEnding) {
+ return fileEnding;
+ } else {
+ throw new Error(taskLib.loc('UnsupportedFileExtension'));
+ }
+ }
+
+ private async extractFiles(file: string, fileEnding: string): Promise {
+ const stats = taskLib.stats(file);
+ if (!stats) {
+ throw new Error(taskLib.loc('ExtractNonExistFile', file));
+ } else if (stats.isDirectory()) {
+ throw new Error(taskLib.loc('ExtractDirFailed', file));
+ }
+
+ if (this.win) {
+ if ('.tar' === fileEnding) { // a simple tar
+ this.sevenZipExtract(file, this.destinationFolder);
+ } else if (JavaFilesExtractor.isTar(file)) { // a compressed tar, e.g. 'fullFilePath/test.tar.gz'
+ // e.g. 'fullFilePath/test.tar.gz' --> 'test.tar.gz'
+ const shortFileName = path.basename(file);
+ // e.g. 'destinationFolder/_test.tar.gz_'
+ const tempFolder = path.normalize(this.destinationFolder + path.sep + '_' + shortFileName + '_');
+ console.log(taskLib.loc('CreateTempDir', tempFolder, file));
+
+ // 0 create temp folder
+ taskLib.mkdirP(tempFolder);
+
+ // 1 extract compressed tar
+ this.sevenZipExtract(file, tempFolder);
+
+ console.log(taskLib.loc('TempDir', tempFolder));
+ const tempTar = tempFolder + path.sep + taskLib.ls('-A', [tempFolder])[0]; // should be only one
+ console.log(taskLib.loc('DecompressedTempTar', file, tempTar));
+
+ // 2 expand extracted tar
+ this.sevenZipExtract(tempTar, this.destinationFolder);
+
+ // 3 cleanup temp folder
+ console.log(taskLib.loc('RemoveTempDir', tempFolder));
+ taskLib.rmRF(tempFolder);
+ } else { // use sevenZip
+ this.sevenZipExtract(file, this.destinationFolder);
+ }
+ } else { // not windows
+ if ('.tar' === fileEnding || '.tar.gz' === fileEnding) {
+ await toolLib.extractTar(file, this.destinationFolder);
+ } else if ('.zip' === fileEnding) {
+ await toolLib.extractZip(file, this.destinationFolder);
+ } else { // fall through and use sevenZip
+ this.sevenZipExtract(file, this.destinationFolder);
+ }
+ }
+ }
+
+ // This method recursively finds all .pack files under fsPath and unpacks them with the unpack200 tool
+ public static unpackJars(fsPath: string, javaBinPath: string): void {
+ if (fs.existsSync(fsPath)) {
+ if (fs.lstatSync(fsPath).isDirectory()) {
+ fs.readdirSync(fsPath).forEach(function(file){
+ const curPath = path.join(fsPath, file);
+ JavaFilesExtractor.unpackJars(curPath, javaBinPath);
+ });
+ } else if (path.extname(fsPath).toLowerCase() === '.pack') {
+ // Unpack the pack file synchronously
+ const p = path.parse(fsPath);
+ const toolName = process.platform.match(/^win/i) ? 'unpack200.exe' : 'unpack200';
+ const args = process.platform.match(/^win/i) ? '-r -v -l ""' : '';
+ const name = path.join(p.dir, p.name);
+ taskLib.execSync(path.join(javaBinPath, toolName), `${args} "${name}.pack" "${name}.jar"`);
+ }
+ }
+ }
+
+ /**
+ * Creates a list of directories on the root level of structure.
+ * @param pathsArray - contains paths to all the files inside the structure
+ * @param root - path to the directory we want to get the structure of
+ */
+ public static sliceStructure(pathsArray: Array, root: string = pathsArray[0]): Array{
+ const dirPathLength = root.length;
+ const structureObject: IDirectoriesDictionary = {};
+ for(let i = 0; i < pathsArray.length; i++){
+ const pathStr = pathsArray[i];
+ const cleanPathStr = pathStr.slice(dirPathLength + 1);
+ if (cleanPathStr === '') {
+ continue;
+ }
+ const dirPathArray = cleanPathStr.split(path.sep);
+ // Create the list of unique values
+ structureObject[dirPathArray[0]] = null;
+ }
+ return Object.keys(structureObject);
+ }
+
+ /**
+ * Returns name w/o file ending
+ * @param name - name of the file
+ */
+ public static getStrippedName(name: string): string {
+ const fileBaseName: string = path.basename(name);
+ const fileEnding: string = JavaFilesExtractor.getSupportedFileEnding(fileBaseName);
+ return fileBaseName.substring(0, fileBaseName.length - fileEnding.length);
+ }
+
+ /**
+ * Returns path to JAVA_HOME, or throw exception if the extracted archive isn't valid
+ * @param pathToStructure - path to files extracted from the JDK archive
+ */
+ public static getJavaHomeFromStructure(pathToStructure): string {
+ const structure: Array = taskLib.find(pathToStructure);
+ const rootItemsArray: Array = JavaFilesExtractor.sliceStructure(structure);
+ const rootDirectoriesArray: Array = new Array();
+ // it is allowed to have extra files in extraction directory, but we shouldn't have more than 1 directory here
+ rootItemsArray.forEach(rootItem => {
+ if (fs.lstatSync(path.join(pathToStructure, rootItem)).isDirectory()) {
+ rootDirectoriesArray.push(rootItem);
+ }
+ });
+ if(rootDirectoriesArray.length == 0) {
+ throw new Error(taskLib.loc('WrongArchiveFile'));
+ }
+ let jdkDirectory: string;
+ if (rootDirectoriesArray.find(dir => dir === BIN_FOLDER)){
+ jdkDirectory = pathToStructure;
+ } else {
+ jdkDirectory = path.join(pathToStructure, rootDirectoriesArray[0]);
+ const ifBinExistsInside: boolean = fs.existsSync(path.join(jdkDirectory, BIN_FOLDER));
+ if (rootDirectoriesArray.length > 1 || !ifBinExistsInside){
+ throw new Error(taskLib.loc('WrongArchiveStructure'));
+ }
+ }
+ return jdkDirectory;
+ }
+
+ /**
+ * Validate files structure if it can be a JDK, then set JAVA_HOME and returns it.
+ * @param pathToExtractedJDK - path to files extracted from the JDK archive
+ * @param withValidation - validate files and search bin inside
+ */
+ public static setJavaHome(pathToExtractedJDK: string, withValidation: boolean = true): string {
+ let jdkDirectory: string = withValidation ?
+ JavaFilesExtractor.getJavaHomeFromStructure(pathToExtractedJDK) :
+ pathToExtractedJDK;
+ console.log(taskLib.loc('SetJavaHome', jdkDirectory));
+ taskLib.setVariable('JAVA_HOME', jdkDirectory);
+ return jdkDirectory;
+ }
+
+ public async unzipJavaDownload(repoRoot: string, fileEnding: string, extractLocation: string): Promise {
+ this.destinationFolder = extractLocation;
+
+ // Create the destination folder if it doesn't exist
+ if (!taskLib.exist(this.destinationFolder)) {
+ console.log(taskLib.loc('CreateDestDir', this.destinationFolder));
+ taskLib.mkdirP(this.destinationFolder);
+ }
+
+ const jdkFile = path.normalize(repoRoot);
+ let stats: taskLib.FsStats;
+ try {
+ stats = taskLib.stats(jdkFile);
+ } catch (error) {
+ if (error.errno === this.ERR_SHARE_ACCESS) {
+ throw new Error(taskLib.loc('ShareAccessError', error.path));
+ }
+ throw(error);
+ }
+ if (stats.isFile()) {
+ await this.extractFiles(jdkFile, fileEnding);
+ }
+ const jdkDirectory: string = JavaFilesExtractor.getJavaHomeFromStructure(this.destinationFolder);
+ JavaFilesExtractor.unpackJars(jdkDirectory, path.join(jdkDirectory, BIN_FOLDER));
+ return jdkDirectory;
+ }
+}
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..67ace33015ae
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Installer für Java-Tools",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?linkid=875287) oder [Java-Dokumentation anzeigen](https://docs.oracle.com/java/)",
+ "loc.description": "Hiermit wird eine bestimmte Java-Version aus einem benutzerseitig bereitgestellten Azure-Blob oder dem Toolcache abgerufen und JAVA_HOME festgelegt.",
+ "loc.instanceNameFormat": "Java $(versionSpec) verwenden",
+ "loc.group.displayName.JavaInAzureGroup": "Java aus einem Azure-Blob herunterladen",
+ "loc.input.label.versionSpec": "JDK-Version",
+ "loc.input.help.versionSpec": "Eine Zahl, die die JDK-Version angibt, die im Pfad verfügbar gemacht werden soll. Verwenden Sie eine ganzzahlige Versionsnummer, z. B. 10.",
+ "loc.input.label.jdkArchitectureOption": "JDK-Architektur",
+ "loc.input.help.jdkArchitectureOption": "Die Architektur (x86, x64) des JDK.",
+ "loc.input.label.jdkSourceOption": "JDK-Quelle",
+ "loc.input.help.jdkSourceOption": "Quelle für das komprimierte JDK.",
+ "loc.input.label.jdkFile": "JDK-Datei",
+ "loc.input.help.jdkFile": "Der Pfad zum Speicherort des komprimierten JDK. Der Pfad kann sich in Ihrem Quellrepository befinden oder ein lokaler Pfad auf dem Agent sein.",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure-Abonnement",
+ "loc.input.help.azureResourceManagerEndpoint": "Wählen Sie das Azure Resource Manager-Abonnement für das JDK aus.",
+ "loc.input.label.azureStorageAccountName": "Speicherkontoname",
+ "loc.input.help.azureStorageAccountName": "Klassische Azure-Speicherkonten und Resource Manager-Speicherkonten werden aufgeführt. Wählen Sie den Speicherkontonamen aus, in dem sich das JDK befindet.",
+ "loc.input.label.azureContainerName": "Containername",
+ "loc.input.help.azureContainerName": "Name des Containers in dem Speicherkonto, in dem sich das JDK befindet.",
+ "loc.input.label.azureCommonVirtualFile": "Gemeinsamer virtueller Pfad",
+ "loc.input.help.azureCommonVirtualFile": "Pfad zum JDK innerhalb des Azure-Speichercontainers.",
+ "loc.input.label.jdkDestinationDirectory": "Zielverzeichnis",
+ "loc.input.help.jdkDestinationDirectory": "Unter Linux und Windows wird dieses Verzeichnis als Zielverzeichnis für die JDK-Installation verwendet. Unter macOS wird dieses Verzeichnis als temporärer Ordner zum Extrahieren von DMG-Dateien verwendet, weil macOS die Installation von JDK in einem bestimmten Verzeichnis nicht unterstützt.",
+ "loc.input.label.azureResourceGroupName": "Ressourcengruppenname",
+ "loc.input.help.azureResourceGroupName": "Ressourcengruppenname des Speicherkontos.",
+ "loc.input.label.cleanDestinationDirectory": "Zielverzeichnis bereinigen",
+ "loc.input.help.cleanDestinationDirectory": "Wählen Sie diese Option aus, um das Zielverzeichnis zu bereinigen, bevor JDK in dieses extrahiert wird.",
+ "loc.input.label.createExtractDirectory": "Verzeichnis zum Extrahieren erstellen",
+ "loc.input.help.createExtractDirectory": "Standardmäßig erstellt die Aufgabe ein Verzeichnis, das diesem JAVA_HOME_8_X64_OpenJDK_zip für das Extrahieren von JDK ähnelt. Mit dieser Option kann die Erstellung dieses Ordners deaktiviert werden. In diesem Fall befindet sich JDK im Stamm von jdkDestinationDirectory.",
+ "loc.messages.DownloadFromAzureBlobStorage": "Artefakte werden aus dem Azure-Blobspeicher heruntergeladen, Containername: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "Erfolgreich abgerufene Elementliste",
+ "loc.messages.StorageAccountDoesNotExist": "Fehler beim Abrufen des Azure-Speicherkontos mit dem Namen %s.",
+ "loc.messages.RequestedUrlTooLong": "Die angeforderte URL ist zu lang. Dies geschieht in der Regel, wenn sich viele Ressourcengruppen im Abonnement befinden. Versuchen Sie, die AzureResourceGroupName-Eingabe festzulegen.",
+ "loc.messages.UnzipExtractFile": "Die Datei wird extrahiert: %s",
+ "loc.messages.SevenZipExtractFile": "Die Datei wird extrahiert: %s",
+ "loc.messages.TarExtractFile": "Die Datei wird extrahiert: %s",
+ "loc.messages.ExtractFileFailedMsg": "Fehler beim Extrahieren der Datei: %s \nCode: %d \nstdout: %s \nstderr: %s \nFehler: %s;",
+ "loc.messages.ExtractNonExistFile": "Fehler beim Extrahieren der Datei \"%s\", weil die Datei nicht vorhanden ist.",
+ "loc.messages.ExtractDirFailed": "Fehler beim Extrahieren der Datei \"%s\", weil es sich um einen Ordner handelt.",
+ "loc.messages.CreateTempDir": "Der temporäre Ordner \"%s\" für die Dekomprimierung wird erstellt: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Die temporäre TAR-Datei wurde von \"%s\" nach \"%s\" dekomprimiert.",
+ "loc.messages.RemoveTempDir": "Der temporäre Ordner wird entfernt: %s",
+ "loc.messages.ExtractFailedCannotCreate": "Fehler beim Extrahieren der Datei \"%s\", weil der temporäre Speicherort nicht erstellt werden konnte: %s",
+ "loc.messages.CleanDestDir": "Der Zielordner wird vor dem Extrahieren bereinigt: %s",
+ "loc.messages.CreateDestDir": "Der Zielordner wird erstellt: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Das JDK wird aus dem Azure-Blobspeicher abgerufen.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Das JDK wird aus einem lokalen Pfad abgerufen.",
+ "loc.messages.SucceedMsg": "Alle Dateien wurden erfolgreich extrahiert.",
+ "loc.messages.SetJavaHome": "JAVA_HOME wird festgelegt auf: %s",
+ "loc.messages.SetExtendedJavaHome": "\"%s\" wird festgelegt auf: %s",
+ "loc.messages.UnsupportedFileExtension": "Die angegebene JDK-Quelldatei weist keine unterstützte Dateierweiterung auf.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Ein Zugriffstoken für Azure konnte nicht abgerufen werden. Statuscode: %s, Statusmeldung: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Ein Zugriffstoken für den verwalteten Dienstprinzipal konnte nicht abgerufen werden. Konfigurieren Sie die verwaltete Dienstidentität (MSI) für den virtuellen Computer (https://aka.ms/azure-msi-docs). Statuscode: %s, Statusmeldung: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Ein Zugriffstoken für den verwalteten Dienstprinzipal konnte nicht abgerufen werden. Statuscode: %s, Statusmeldung: %s",
+ "loc.messages.ExpiredServicePrincipal": "Das Zugriffstoken für Azure konnte nicht abgerufen werden. Stellen Sie sicher, dass der verwendete Dienstprinzipal gültig und nicht abgelaufen ist.",
+ "loc.messages.CorrelationIdForARM": "Korrelations-ID aus ARM-API-Aufrufantwort: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s ist für diesen Agent nicht vorinstalliert.",
+ "loc.messages.UsePreinstalledJava": "Vorinstalliertes JDK aus \"%s\" verwenden",
+ "loc.messages.WrongArchiveStructure": "Die JDK-Datei ist ungültig. Stellen Sie sicher, dass die JDK-Datei nur einen Stammordner mit \"bin\" enthält.",
+ "loc.messages.WrongArchiveFile": "Die Archivdatei ist falsch. Es ist kein Ordner vorhanden, der JDK enthält.",
+ "loc.messages.ShareAccessError": "Freigegebene Netzwerkressource nicht verfügbar: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "Die JDK-Datei wird nicht unterstützt. Stellen Sie sicher, dass die JDK-Datei genau einen Ordner enthält.",
+ "loc.messages.NoPKGFile": "Die PKG-Datei wurde nicht gefunden.",
+ "loc.messages.SeveralPKGFiles": "Es wurden mehrere PKG-Dateien gefunden.",
+ "loc.messages.InstallJDK": "JDK wird installiert.",
+ "loc.messages.AttachDiskImage": "Ein Datenträgerimage wird angefügt.",
+ "loc.messages.DetachDiskImage": "Ein Datenträgerimage wird getrennt.",
+ "loc.messages.PkgPathDoesNotExist": "Der Paketpfad ist nicht vorhanden.",
+ "loc.messages.PreInstalledJavaUpgraded": "Das vorinstallierte JDK wurde aktualisiert.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java wurde erfolgreich installiert.",
+ "loc.messages.ArchiveWasExtractedEarlier": "Das Archiv mit JDK wurde bereits extrahiert – das Extrahieren wird übersprungen.",
+ "loc.messages.ExtractingArchiveToPath": "Archiv wird extrahiert in: %s",
+ "loc.messages.ErrorCleaningFolder": "Fehler beim Bereinigen des Ordners: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..f793bffd2f89
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Java tool installer",
+ "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=875287) or [see the Java documentation](https://docs.oracle.com/java/)",
+ "loc.description": "Acquire a specific version of Java from a user-supplied Azure blob or the tool cache and sets JAVA_HOME",
+ "loc.instanceNameFormat": "Use Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Download Java from an Azure blob",
+ "loc.input.label.versionSpec": "JDK version",
+ "loc.input.help.versionSpec": "A number that specifies the JDK version to make available on the path. Use a whole number version, such as 10",
+ "loc.input.label.jdkArchitectureOption": "JDK architecture",
+ "loc.input.help.jdkArchitectureOption": "The architecture (x86, x64) of the JDK.",
+ "loc.input.label.jdkSourceOption": "JDK source",
+ "loc.input.help.jdkSourceOption": "Source for the compressed JDK.",
+ "loc.input.label.jdkFile": "JDK file",
+ "loc.input.help.jdkFile": "Path to where the compressed JDK is located. The path could be in your source repository or a local path on the agent.",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure subscription",
+ "loc.input.help.azureResourceManagerEndpoint": "Choose the Azure Resource Manager subscription for the JDK.",
+ "loc.input.label.azureStorageAccountName": "Storage account name",
+ "loc.input.help.azureStorageAccountName": "Azure Classic and Resource Manager storage accounts are listed. Select the storage account name in which the JDK is located.",
+ "loc.input.label.azureContainerName": "Container name",
+ "loc.input.help.azureContainerName": "Name of the container in the storage account in which the JDK is located.",
+ "loc.input.label.azureCommonVirtualFile": "Common virtual path",
+ "loc.input.help.azureCommonVirtualFile": "Path to the JDK inside the Azure storage container.",
+ "loc.input.label.jdkDestinationDirectory": "Destination directory",
+ "loc.input.help.jdkDestinationDirectory": "On Linux and Windows, this is used as the destination directory for JDK installation. On macOS, this directory is used as a temporary folder for extracting of .dmg's since macOS doesn't support installing of JDK to specific directory.",
+ "loc.input.label.azureResourceGroupName": "Resource Group name",
+ "loc.input.help.azureResourceGroupName": "Resource Group name of the storage account.",
+ "loc.input.label.cleanDestinationDirectory": "Clean destination directory",
+ "loc.input.help.cleanDestinationDirectory": "Select this option to clean the destination directory before JDK is extracted into it.",
+ "loc.input.label.createExtractDirectory": "Create directory for extracting",
+ "loc.input.help.createExtractDirectory": "By default, task is creating a directory similar to this JAVA_HOME_8_X64_OpenJDK_zip for extracting JDK. This option allows to disable creation of this folder, in this case, JDK will be located in the root of jdkDestinationDirectory",
+ "loc.messages.DownloadFromAzureBlobStorage": "Downloading artifacts from Azure blob storage, Container Name: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "Successfully fetched list of items",
+ "loc.messages.StorageAccountDoesNotExist": "Failed to get azure storage account with name %s.",
+ "loc.messages.RequestedUrlTooLong": "Requested URL is too long, this usually happen when you have a lot of Resource Groups in the subscription, try to set azureResourceGroupName input.",
+ "loc.messages.UnzipExtractFile": "Extracting file: %s",
+ "loc.messages.SevenZipExtractFile": "Extracting file: %s",
+ "loc.messages.TarExtractFile": "Extracting file: %s",
+ "loc.messages.ExtractFileFailedMsg": "Extraction failed for file: %s \ncode: %d \nstdout: %s \nstderr: %s \nerror: %s;",
+ "loc.messages.ExtractNonExistFile": "Extraction failed for file: %s because it does not exist.",
+ "loc.messages.ExtractDirFailed": "Extraction failed for file: %s because it is a directory.",
+ "loc.messages.CreateTempDir": "Creating temp folder: %s to decompress: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Decompressed temporary tar from: %s to: %s",
+ "loc.messages.RemoveTempDir": "Removing temp folder: %s",
+ "loc.messages.ExtractFailedCannotCreate": "Extraction failed for file: %s because temporary location could not be created: %s",
+ "loc.messages.CleanDestDir": "Cleaning destination folder before extraction: %s",
+ "loc.messages.CreateDestDir": "Creating destination folder: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Retrieving the JDK from Azure blob storage.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Retrieving the JDK from local path.",
+ "loc.messages.SucceedMsg": "Successfully extracted all files.",
+ "loc.messages.SetJavaHome": "JAVA_HOME is being set to: %s",
+ "loc.messages.SetExtendedJavaHome": "%s is being set to: %s",
+ "loc.messages.UnsupportedFileExtension": "Specified JDK source file does not have a supported file extension.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Could not fetch access token for Azure. Status code: %s, status message: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not fetch access token for Managed Service Principal. Please configure Managed Service Identity (MSI) for virtual machine 'https://aka.ms/azure-msi-docs'. Status code: %s, status message: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Could not fetch access token for Managed Service Principal. Status code: %s, status message: %s",
+ "loc.messages.ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.",
+ "loc.messages.CorrelationIdForARM": "Correlation ID from ARM api call response : %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s is not preinstalled on this agent",
+ "loc.messages.UsePreinstalledJava": "Use preinstalled JDK from %s",
+ "loc.messages.WrongArchiveStructure": "JDK file is not valid. Verify if JDK file contains only one root folder with 'bin' inside.",
+ "loc.messages.WrongArchiveFile": "Archive file is wrong. There is not any folder which contains JDK",
+ "loc.messages.ShareAccessError": "Network shared resource not available: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "JDK file is not supported. Verify if JDK file contains exactly one folder inside.",
+ "loc.messages.NoPKGFile": "Could not find PKG file.",
+ "loc.messages.SeveralPKGFiles": "Found more than one PKG files.",
+ "loc.messages.InstallJDK": "Installing JDK.",
+ "loc.messages.AttachDiskImage": "Attaching a disk image.",
+ "loc.messages.DetachDiskImage": "Detaching a disk image.",
+ "loc.messages.PkgPathDoesNotExist": "Package path does not exist.",
+ "loc.messages.PreInstalledJavaUpgraded": "Preinstalled JDK updated.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java has been successfully installed",
+ "loc.messages.ArchiveWasExtractedEarlier": "Archive with JDK was extracted earlier - skipping extracting",
+ "loc.messages.ExtractingArchiveToPath": "Extracting archive to: %s",
+ "loc.messages.ErrorCleaningFolder": "Folder cleaning error: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..13e082bc152b
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Instalador de herramientas de Java",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?linkid=875287) o [consultar la documentación de Java](https://docs.oracle.com/java/)",
+ "loc.description": "Adquiere una versión específica de Java de un blob de Azure proporcionado por el usuario o la memoria caché de herramientas y establece JAVA_HOME.",
+ "loc.instanceNameFormat": "Usar Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Descargar Java desde un blob de Azure",
+ "loc.input.label.versionSpec": "Versión de JDK",
+ "loc.input.help.versionSpec": "Número que especifica la versión de JDK que estará disponible en la ruta de acceso. Use un número entero para la versión; por ejemplo, 10.",
+ "loc.input.label.jdkArchitectureOption": "Arquitectura JDK",
+ "loc.input.help.jdkArchitectureOption": "La arquitectura (x86, x64) de JDK.",
+ "loc.input.label.jdkSourceOption": "Origen de JDK",
+ "loc.input.help.jdkSourceOption": "Origen de JDK comprimido.",
+ "loc.input.label.jdkFile": "Archivo JDK",
+ "loc.input.help.jdkFile": "Ruta de acceso a la ubicación de JDK comprimido. Dicha ruta puede estar en el repositorio de origen o ser una ruta de acceso local en el agente.",
+ "loc.input.label.azureResourceManagerEndpoint": "Suscripción de Azure",
+ "loc.input.help.azureResourceManagerEndpoint": "Elija la suscripción de Azure Resource Manager para JDK.",
+ "loc.input.label.azureStorageAccountName": "Nombre de cuenta de Storage",
+ "loc.input.help.azureStorageAccountName": "Se muestran las cuentas de almacenamiento de Azure clásico y de Resource Manager. Seleccione el nombre de la cuenta de almacenamiento en la que se encuentra JDK.",
+ "loc.input.label.azureContainerName": "Nombre del contenedor",
+ "loc.input.help.azureContainerName": "Nombre del contenedor de la cuenta de almacenamiento donde se encuentra el JDK.",
+ "loc.input.label.azureCommonVirtualFile": "Ruta de acceso virtual común",
+ "loc.input.help.azureCommonVirtualFile": "Ruta de acceso al JDK dentro del contenedor de almacenamiento de Azure.",
+ "loc.input.label.jdkDestinationDirectory": "Directorio de destino",
+ "loc.input.help.jdkDestinationDirectory": "En Linux y Windows, se usa como directorio de destino para la instalación de JDK. En macOS, este directorio se usa como carpeta temporal para la extracción de archivos .dmg, ya que macOS no admite la instalación de JDK en el directorio específico.",
+ "loc.input.label.azureResourceGroupName": "Nombre del grupo de recursos",
+ "loc.input.help.azureResourceGroupName": "Nombre del grupo de recursos de la cuenta de almacenamiento.",
+ "loc.input.label.cleanDestinationDirectory": "Limpiar directorio de destino",
+ "loc.input.help.cleanDestinationDirectory": "Seleccione esta opción para limpiar el directorio de destino antes de extraer JDK en este.",
+ "loc.input.label.createExtractDirectory": "Crear directorio para la extracción",
+ "loc.input.help.createExtractDirectory": "De forma predeterminada, la tarea está creando un directorio similar a este JAVA_HOME_8_X64_OpenJDK_zip para extraer JDK. Esta opción permite deshabilitar la creación de esta carpeta. Si se deshabilita, el JDK se ubicará en la raíz de jdkDestinationDirectory",
+ "loc.messages.DownloadFromAzureBlobStorage": "Descargando artefactos de Azure Blob Storage. Nombre del contenedor: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "La lista de elementos se recuperó correctamente.",
+ "loc.messages.StorageAccountDoesNotExist": "No se pudo obtener la cuenta de Azure Storage con el nombre %s.",
+ "loc.messages.RequestedUrlTooLong": "La dirección URL solicitada es demasiado larga. Esto suele ocurrir cuando hay muchos grupos de recursos en la suscripción. Intente establecer la entrada azureResourceGroupName.",
+ "loc.messages.UnzipExtractFile": "Extrayendo archivo: %s",
+ "loc.messages.SevenZipExtractFile": "Extrayendo archivo: %s",
+ "loc.messages.TarExtractFile": "Extrayendo archivo: %s",
+ "loc.messages.ExtractFileFailedMsg": "Error al extraer el archivo: %s \nCódigo: %d \nStdOut: %s \nStdErr: %s \nError: %s;",
+ "loc.messages.ExtractNonExistFile": "Error al extraer el archivo: %s porque no existe.",
+ "loc.messages.ExtractDirFailed": "Error al extraer el archivo: %s porque es un directorio.",
+ "loc.messages.CreateTempDir": "Creando la carpeta temporal: %s para descomprimir: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Archivo tar temporal descomprimido de: %s a: %s",
+ "loc.messages.RemoveTempDir": "Quitando la carpeta temporal: %s",
+ "loc.messages.ExtractFailedCannotCreate": "Error al extraer el archivo: %s porque no se pudo crear la ubicación temporal: %s",
+ "loc.messages.CleanDestDir": "Limpiando la carpeta de destino antes de la extracción: %s",
+ "loc.messages.CreateDestDir": "Creando la carpeta de destino: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Recuperando el JDK de Azure Blob Storage.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Recuperando el JDK de la ruta de acceso local.",
+ "loc.messages.SucceedMsg": "Todos los archivos se extrajeron correctamente.",
+ "loc.messages.SetJavaHome": "JAVA_HOME se está estableciendo en: %s",
+ "loc.messages.SetExtendedJavaHome": "%s se está estableciendo en: %s",
+ "loc.messages.UnsupportedFileExtension": "El archivo de origen de JDK que se ha especificado no tiene una extensión de archivo compatible.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "No se pudo capturar el token de acceso para Azure. Código de estado: %s. Mensaje de estado: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "No se pudo capturar el token de acceso para la entidad de servicio administrada. Configure Managed Service Identity (MSI) para la máquina virtual \"https://aka.ms/azure-msi-docs\". Código de estado: %s. Mensaje de estado: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "No se pudo capturar el token de acceso para la entidad de servicio administrada. Código de estado: %s. Mensaje de estado: %s",
+ "loc.messages.ExpiredServicePrincipal": "No se pudo capturar el token de acceso de Azure. Compruebe que la entidad de servicio usada es válida y no ha expirado.",
+ "loc.messages.CorrelationIdForARM": "Identificador de correlación de la respuesta de llamada API de ARM: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s no está preinstalado en este agente.",
+ "loc.messages.UsePreinstalledJava": "Usar JDK preinstalado desde %s",
+ "loc.messages.WrongArchiveStructure": "El archivo JDK no es válido. Compruebe si dicho archivo contiene solo una carpeta raíz con \"bin\" incluido.",
+ "loc.messages.WrongArchiveFile": "El archivo de almacenamiento es incorrecto. No hay ninguna carpeta que contenga JDK",
+ "loc.messages.ShareAccessError": "Recurso compartido de red no disponible: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "No se admite el archivo JDK. Compruebe si dicho archivo contiene una carpeta exactamente.",
+ "loc.messages.NoPKGFile": "No se encontró el archivo .pkg.",
+ "loc.messages.SeveralPKGFiles": "Se encontró más de un archivo .pkg.",
+ "loc.messages.InstallJDK": "Instalando JDK.",
+ "loc.messages.AttachDiskImage": "Asociando una imagen de disco.",
+ "loc.messages.DetachDiskImage": "Desasociando una imagen de disco.",
+ "loc.messages.PkgPathDoesNotExist": "La ruta de acceso del paquete no existe.",
+ "loc.messages.PreInstalledJavaUpgraded": "Se ha actualizado el JDK preinstalado.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java se ha instalado correctamente.",
+ "loc.messages.ArchiveWasExtractedEarlier": "El archivo con JDK se extrajo anteriormente; se omite la extracción.",
+ "loc.messages.ExtractingArchiveToPath": "Extrayendo el archivo de almacenamiento a %s",
+ "loc.messages.ErrorCleaningFolder": "Error de limpieza de la carpeta: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..26d9cce698e7
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Programme d'installation de l'outil Java",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?linkid=875287) ou [consulter la documentation de Java](https://docs.oracle.com/java/)",
+ "loc.description": "Acquérir une version spécifique de Java à partir d'un blob Azure fourni par l'utilisateur ou à partir du cache d'outils, puis définir JAVA_HOME",
+ "loc.instanceNameFormat": "Utiliser Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Télécharger Java à partir d'un blob Azure",
+ "loc.input.label.versionSpec": "Version du kit JDK",
+ "loc.input.help.versionSpec": "Numéro de version du kit JDK disponible dans le chemin. Utilisez un nombre entier pour la version, par exemple 10",
+ "loc.input.label.jdkArchitectureOption": "Architecture du kit JDK",
+ "loc.input.help.jdkArchitectureOption": "Architecture (x86, x64) du kit JDK.",
+ "loc.input.label.jdkSourceOption": "Source du kit JDK",
+ "loc.input.help.jdkSourceOption": "Source du kit JDK compressé.",
+ "loc.input.label.jdkFile": "Fichier du kit JDK",
+ "loc.input.help.jdkFile": "Chemin du kit JDK compressé. Le chemin peut correspondre à votre dépôt source ou à un chemin local sur l'agent.",
+ "loc.input.label.azureResourceManagerEndpoint": "Abonnement Azure",
+ "loc.input.help.azureResourceManagerEndpoint": "Choisissez l'abonnement Azure Resource Manager pour le kit JDK.",
+ "loc.input.label.azureStorageAccountName": "Nom du compte de stockage",
+ "loc.input.help.azureStorageAccountName": "Les comptes de stockage Azure Classic et Azure Resource Manager sont listés. Sélectionnez le nom du compte de stockage dans lequel se trouve le kit JDK.",
+ "loc.input.label.azureContainerName": "Nom du conteneur",
+ "loc.input.help.azureContainerName": "Nom du conteneur dans le compte de stockage où se trouve le kit JDK.",
+ "loc.input.label.azureCommonVirtualFile": "Chemin virtuel commun",
+ "loc.input.help.azureCommonVirtualFile": "Chemin du kit JDK présent dans le conteneur du stockage Azure.",
+ "loc.input.label.jdkDestinationDirectory": "Répertoire de destination",
+ "loc.input.help.jdkDestinationDirectory": "Sur Linux et Windows, il s'agit du répertoire de destination pour l'installation du kit JDK. Sur macOS, ce répertoire est utilisé en tant que dossier temporaire pour l'extraction des fichiers .dmg, car macOS ne prend pas en charge l'installation du kit JDK dans un répertoire spécifique.",
+ "loc.input.label.azureResourceGroupName": "Nom du groupe de ressources",
+ "loc.input.help.azureResourceGroupName": "Nom du groupe de ressources du compte de stockage.",
+ "loc.input.label.cleanDestinationDirectory": "Nettoyer le répertoire de destination",
+ "loc.input.help.cleanDestinationDirectory": "Sélectionnez cette option pour nettoyer le répertoire de destination avant d'y extraire le kit JDK.",
+ "loc.input.label.createExtractDirectory": "Créer un répertoire pour l’extraction",
+ "loc.input.help.createExtractDirectory": "Par défaut, la tâche crée un répertoire similaire à ce JAVA_HOME_8_X64_OpenJDK_zip pour extraire le JDK. Cette option permet de désactiver la création de ce dossier, dans ce cas, le JDK sera situé à la racine du répertoire jdkDestinationDirectory.",
+ "loc.messages.DownloadFromAzureBlobStorage": "Téléchargement d'artefacts à partir du Stockage Blob Azure. Nom du conteneur : %s",
+ "loc.messages.SuccessFullyFetchedItemList": "Récupération (fetch) réussie de la liste des éléments",
+ "loc.messages.StorageAccountDoesNotExist": "Échec de l'obtention du compte de stockage Azure nommé %s.",
+ "loc.messages.RequestedUrlTooLong": "L’URL demandée est trop longue. Cela se produit généralement lorsque vous avez beaucoup de groupes de ressources dans l’abonnement. Essayez de définir l’entrée azureResourceGroupName.",
+ "loc.messages.UnzipExtractFile": "Extraction du fichier : %s",
+ "loc.messages.SevenZipExtractFile": "Extraction du fichier : %s",
+ "loc.messages.TarExtractFile": "Extraction du fichier : %s",
+ "loc.messages.ExtractFileFailedMsg": "Échec de l'extraction pour le fichier %s \nCode : %d \nstdout : %s \nstderr : %s \nErreur : %s;",
+ "loc.messages.ExtractNonExistFile": "Échec de l'extraction du fichier %s , car il n'existe pas.",
+ "loc.messages.ExtractDirFailed": "Échec de l'extraction du fichier %s, car il s'agit d'un répertoire.",
+ "loc.messages.CreateTempDir": "Création du dossier temporaire %s à décompresser : %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Fichier temporaire .tar décompressé de %s à %s",
+ "loc.messages.RemoveTempDir": "Suppression du fichier temporaire : %s",
+ "loc.messages.ExtractFailedCannotCreate": "Échec de l'extraction du fichier %s, car l'emplacement temporaire n'a pas pu être créé : %s",
+ "loc.messages.CleanDestDir": "Nettoyage du dossier de destination avant l'extraction : %s",
+ "loc.messages.CreateDestDir": "Création du dossier de destination : %s",
+ "loc.messages.RetrievingJdkFromAzure": "Récupération du kit JDK à partir du Stockage Blob Azure.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Récupération du kit JDK à partir du chemin local.",
+ "loc.messages.SucceedMsg": "Extraction réussie de tous les fichiers.",
+ "loc.messages.SetJavaHome": "JAVA_HOME a la valeur %s",
+ "loc.messages.SetExtendedJavaHome": "%s a la valeur %s",
+ "loc.messages.UnsupportedFileExtension": "Le fichier source de kit JDK spécifié n'a pas d'extension de fichier prise en charge.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Impossible de récupérer (fetch) le jeton d'accès pour Azure. Code d'état : %s, message d'état : %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Impossible de récupérer (fetch) le jeton d'accès pour le principal du service managé. Configurez MSI (Managed Service Identity) pour la machine virtuelle 'https://aka.ms/azure-msi-docs'. Code d'état : %s, message d'état : %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Impossible de récupérer (fetch) le jeton d'accès pour le principal du service managé. Code d'état : %s, message d'état : %s",
+ "loc.messages.ExpiredServicePrincipal": "Impossible de récupérer (fetch) le jeton d'accès pour Azure. Vérifiez si le principal de service utilisé est valide et s'il n'a pas expiré.",
+ "loc.messages.CorrelationIdForARM": "ID de corrélation de la réponse à l'appel d'API ARM : %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s n'est pas préinstallé sur cet agent",
+ "loc.messages.UsePreinstalledJava": "Utiliser le kit JDK préinstallé à partir de %s",
+ "loc.messages.WrongArchiveStructure": "Le fichier JDK n'est pas valide. Vérifiez si le fichier JDK comporte bien un seul dossier racine contenant 'bin'.",
+ "loc.messages.WrongArchiveFile": "Le fichier d’archive est incorrect. Aucun dossier ne contient de JDK",
+ "loc.messages.ShareAccessError": "Ressource réseau partagée non disponible : (%s)",
+ "loc.messages.UnsupportedDMGStructure": "Le fichier JDK n'est pas pris en charge. Vérifiez si le fichier JDK contient bien un seul dossier.",
+ "loc.messages.NoPKGFile": "Le fichier PKG est introuvable.",
+ "loc.messages.SeveralPKGFiles": "Plusieurs fichiers PKG ont été trouvés.",
+ "loc.messages.InstallJDK": "Installation du kit JDK.",
+ "loc.messages.AttachDiskImage": "Attachement d'une image de disque.",
+ "loc.messages.DetachDiskImage": "Détachement d'une image de disque.",
+ "loc.messages.PkgPathDoesNotExist": "Le chemin du package n'existe pas.",
+ "loc.messages.PreInstalledJavaUpgraded": "Le kit JDK préinstallé a été mis à jour.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java a été correctement installé",
+ "loc.messages.ArchiveWasExtractedEarlier": "L'archive incluant le kit JDK a déjà été extraite. Extraction ignorée",
+ "loc.messages.ExtractingArchiveToPath": "Extraction de l'archive vers %s",
+ "loc.messages.ErrorCleaningFolder": "Erreur de nettoyage du dossier : %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..16b7881ace1f
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Programma di installazione strumento Java",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?linkid=875287). In alternativa [vedere la documentazione di Java](https://docs.oracle.com/java/)",
+ "loc.description": "Acquisisce una versione specifica di Java da un BLOB di Azure specificato dall'utente o dalla cache degli strumenti e imposta JAVA_HOME",
+ "loc.instanceNameFormat": "Usa Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Scarica Java da un BLOB di Azure",
+ "loc.input.label.versionSpec": "Versione del JDK",
+ "loc.input.help.versionSpec": "Numero che specifica la versione del JDK da rendere disponibile nel percorso. Usare un numero di versione intero, ad esempio 10",
+ "loc.input.label.jdkArchitectureOption": "Architettura del JDK",
+ "loc.input.help.jdkArchitectureOption": "Architettura (x86, x64) del JDK.",
+ "loc.input.label.jdkSourceOption": "Origine del JDK",
+ "loc.input.help.jdkSourceOption": "Origine del JDK compresso.",
+ "loc.input.label.jdkFile": "File del JDK",
+ "loc.input.help.jdkFile": "Percorso in cui si trova il JDK compresso. Il percorso può trovarsi nel repository di origine o in un percorso locale nell'agente.",
+ "loc.input.label.azureResourceManagerEndpoint": "Sottoscrizione di Azure",
+ "loc.input.help.azureResourceManagerEndpoint": "Consente di scegliere la sottoscrizione di Azure Resource Manager per il JDK.",
+ "loc.input.label.azureStorageAccountName": "Nome account di archiviazione",
+ "loc.input.help.azureStorageAccountName": "Sono elencati gli account di archiviazione di Azure Classic e Resource Manager. Selezionare il nome dell'account di archiviazione in cui si trova il JDK.",
+ "loc.input.label.azureContainerName": "Nome contenitore",
+ "loc.input.help.azureContainerName": "Nome del contenitore nell'account di archiviazione in cui si trova il JDK.",
+ "loc.input.label.azureCommonVirtualFile": "Percorso virtuale comune",
+ "loc.input.help.azureCommonVirtualFile": "Percorso del JDK all'interno del contenitore di archiviazione di Azure.",
+ "loc.input.label.jdkDestinationDirectory": "Directory di destinazione",
+ "loc.input.help.jdkDestinationDirectory": "In Linux e Windows viene usata come directory di destinazione per l'installazione del JDK. In macOS questa directory viene usata come cartella temporanea per l'estrazione dei file con estensione dmg perché macOS non supporta l'installazione del JDK in una directory specifica.",
+ "loc.input.label.azureResourceGroupName": "Nome gruppo di risorse",
+ "loc.input.help.azureResourceGroupName": "Nome del gruppo di risorse dell'account di archiviazione.",
+ "loc.input.label.cleanDestinationDirectory": "Pulisci la directory di destinazione",
+ "loc.input.help.cleanDestinationDirectory": "Selezionare questa opzione per pulire la directory di destinazione prima di estrarvi il JDK.",
+ "loc.input.label.createExtractDirectory": "Crea directory per l'estrazione",
+ "loc.input.help.createExtractDirectory": "Per impostazione predefinita, l'attività crea una directory simile a JAVA_HOME_8_X64_OpenJDK_zip per l'estrazione del JDK. Questa opzione consente di disabilitare la creazione di questa cartella. In questo caso il JDK verrà salvato nella radice di jdkDestinationDirectory",
+ "loc.messages.DownloadFromAzureBlobStorage": "Download degli artefatti da Archiviazione BLOB di Azure. Nome del contenitore: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "L'elenco di elementi è stato recuperato",
+ "loc.messages.StorageAccountDoesNotExist": "Non è stato possibile recuperare l'account di archiviazione di Azure denominato %s.",
+ "loc.messages.RequestedUrlTooLong": "L'URL richiesto è troppo lungo. Questo problema si verifica in genere quando nella sottoscrizione sono presenti molti gruppi di risorse, si tenta di impostare l'input azureResourceGroupName.",
+ "loc.messages.UnzipExtractFile": "Estrazione del file: %s",
+ "loc.messages.SevenZipExtractFile": "Estrazione del file: %s",
+ "loc.messages.TarExtractFile": "Estrazione del file: %s",
+ "loc.messages.ExtractFileFailedMsg": "L'estrazione del file %s non è riuscita\nCodice: %d \nStdout: %s \nStderr: %s \nErrore: %s;",
+ "loc.messages.ExtractNonExistFile": "L'estrazione del file %s non è riuscita perché non esiste.",
+ "loc.messages.ExtractDirFailed": "L'estrazione del file %s non è riuscita perché è una directory.",
+ "loc.messages.CreateTempDir": "Creazione della cartella temporanea %s per la decompressione di %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Il file TAR temporaneo è stato decompresso da %s in %s",
+ "loc.messages.RemoveTempDir": "Rimozione della cartella temporanea: %s",
+ "loc.messages.ExtractFailedCannotCreate": "L'estrazione del file %s perché non è stato possibile trovare il percorso temporaneo: %s",
+ "loc.messages.CleanDestDir": "Pulizia della cartella di destinazione prima dell'estrazione: %s",
+ "loc.messages.CreateDestDir": "Creazione della cartella di destinazione: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Recupero del JDK da Archiviazione BLOB di Azure.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Recupero del JDK dal percorso locale.",
+ "loc.messages.SucceedMsg": "Sono stati estratti tutti i file.",
+ "loc.messages.SetJavaHome": "JAVA_HOME verrà impostato su: %s",
+ "loc.messages.SetExtendedJavaHome": "%s verrà impostato su: %s",
+ "loc.messages.UnsupportedFileExtension": "Per il file di origine del JDK specificato non esiste alcuna estensione di file supportata.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Non è stato possibile recuperare il token di accesso per Azure. Codice di stato: %s. Messaggio di stato: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Non è stato possibile recuperare il token di accesso per l'entità servizio gestita. Configurare l'identità del servizio gestita per la macchina virtuale 'https://aka.ms/azure-msi-docs'. Codice di stato: %s. Messaggio di stato: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Non è stato possibile recuperare il token di accesso per l'entità servizio gestita. Codice di stato: %s. Messaggio di stato: %s",
+ "loc.messages.ExpiredServicePrincipal": "Non è stato possibile recuperare il token di accesso per Azure. Verificare che l'entità servizio usata sia valida e non sia scaduta.",
+ "loc.messages.CorrelationIdForARM": "ID correlazione della risposta alla chiamata API ARM: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s non è preinstallato in questo agente",
+ "loc.messages.UsePreinstalledJava": "Usa il JDK preinstallato da %s",
+ "loc.messages.WrongArchiveStructure": "Il file JDK non è valido. Verificare se il file JDK contiene solo una cartella radice con 'bin'.",
+ "loc.messages.WrongArchiveFile": "Il file di archivio non è corretto. Non esiste alcuna cartella contenente JDK",
+ "loc.messages.ShareAccessError": "Risorsa condivisa di rete non disponibile: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "Il file JDK non è supportato. Verificare se il file JDK contiene esattamente una cartella.",
+ "loc.messages.NoPKGFile": "Non è stato possibile trovare il file PKG.",
+ "loc.messages.SeveralPKGFiles": "Sono stati trovati più file PKG.",
+ "loc.messages.InstallJDK": "Installazione del JDK.",
+ "loc.messages.AttachDiskImage": "Collegamento a un'immagine del disco.",
+ "loc.messages.DetachDiskImage": "Rimozione di un'immagine del disco.",
+ "loc.messages.PkgPathDoesNotExist": "Il percorso del pacchetto non esiste.",
+ "loc.messages.PreInstalledJavaUpgraded": "Il JDK preinstallato è stato aggiornato.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java è stato installato",
+ "loc.messages.ArchiveWasExtractedEarlier": "L'archivio con JDK è stato estratto in precedenza. L'estrazione verrà ignorata",
+ "loc.messages.ExtractingArchiveToPath": "Estrazione dell'archivio in: %s",
+ "loc.messages.ErrorCleaningFolder": "Errore di pulizia della cartella: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..7ddbca1bb3f2
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Java ツール インストーラー",
+ "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?linkid=875287)、または [Java のドキュメントを参照](https://docs.oracle.com/java/)",
+ "loc.description": "ユーザーが指定する Azure Blob またはツール キャッシュから Java の特定のバージョンを取得し、JAVA_HOME を設定します",
+ "loc.instanceNameFormat": "Java $(versionSpec) の使用",
+ "loc.group.displayName.JavaInAzureGroup": "Azure BLOB からの Java のダウンロード",
+ "loc.input.label.versionSpec": "JDK バージョン",
+ "loc.input.help.versionSpec": "パス上で使用可能にする JDK バージョンを指定する数値。10 などの整数のバージョンを使用します",
+ "loc.input.label.jdkArchitectureOption": "JDK アーキテクチャ",
+ "loc.input.help.jdkArchitectureOption": "JDK のアーキテクチャ (x86、x64)。",
+ "loc.input.label.jdkSourceOption": "JDK ソース",
+ "loc.input.help.jdkSourceOption": "圧縮された JDK のソース。",
+ "loc.input.label.jdkFile": "JDK ファイル",
+ "loc.input.help.jdkFile": "圧縮された JDK が存在する場所へのパス。パスは、ソース リポジトリ、またはエージェント上のローカル パスの可能性があります。",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure サブスクリプション",
+ "loc.input.help.azureResourceManagerEndpoint": "JDK 用の Azure Resource Manager サブスクリプションを選択します。",
+ "loc.input.label.azureStorageAccountName": "ストレージ アカウント名",
+ "loc.input.help.azureStorageAccountName": "Azure クラシックと Resoure Manager のストレージ アカウントの一覧を示します。JDK があるストレージ アカウント名を選択します。",
+ "loc.input.label.azureContainerName": "コンテナー名",
+ "loc.input.help.azureContainerName": "JDK が存在するストレージ アカウントのコンテナー名です。",
+ "loc.input.label.azureCommonVirtualFile": "共通仮想パス",
+ "loc.input.help.azureCommonVirtualFile": "Azure ストレージ コンテナー内の JDK へのパス。",
+ "loc.input.label.jdkDestinationDirectory": "宛先ディレクトリ",
+ "loc.input.help.jdkDestinationDirectory": "Linux および Windows では、これは JDK のインストール先ディレクトリとして使用されます。macOSでは、JDK を特定のディレクトリにインストールすることはサポートされていないため、このディレクトリは .dmg を抽出する際の一時フォルダーとして使用されます。",
+ "loc.input.label.azureResourceGroupName": "リソース グループ名",
+ "loc.input.help.azureResourceGroupName": "ストレージ アカウントのリソース グループ名。",
+ "loc.input.label.cleanDestinationDirectory": "宛先ディレクトリの消去",
+ "loc.input.help.cleanDestinationDirectory": "JDK を抽出する前に宛先ディレクトリを空にする場合、このオプションを選択します。",
+ "loc.input.label.createExtractDirectory": "抽出するためのディレクトリを作成",
+ "loc.input.help.createExtractDirectory": "既定では、JDK を抽出するために、タスクはこの JAVA_HOME_8_X64_OpenJDK_zip に類似したディレクトリを作成しています。このオプションを使用すると、このフォルダーの作成を無効にすることができます。この場合、JDK は jdkDestinationDirectory のルートに配置されます",
+ "loc.messages.DownloadFromAzureBlobStorage": "Azure Blob Storage から成果物をダウンロードしています。コンテナー名: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "項目の一覧が正常にフェッチされました",
+ "loc.messages.StorageAccountDoesNotExist": "名前 %s の Azure ストレージ アカウントを取得できませんでした。",
+ "loc.messages.RequestedUrlTooLong": "要求の URL が長すぎます。多くの場合、この問題はサブスクリプションに多数のリソース グループがあるときに発生します。azureResourceGroupName の入力を設定してみてください。",
+ "loc.messages.UnzipExtractFile": "次のファイルを抽出しています: %s",
+ "loc.messages.SevenZipExtractFile": "次のファイルを抽出しています: %s",
+ "loc.messages.TarExtractFile": "次のファイルを抽出しています: %s",
+ "loc.messages.ExtractFileFailedMsg": "次のファイルを抽出できませんでした: %s \ncode: %d \nstdout: %s \nstderr: %s \nerror: %s;",
+ "loc.messages.ExtractNonExistFile": "ファイル %s がないので抽出できませんでした。",
+ "loc.messages.ExtractDirFailed": "ファイル: %s はディレクトリなので抽出できませんでした。",
+ "loc.messages.CreateTempDir": "展開するための一時フォルダー %s を作成しています: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "一時 tar を %s から %s に展開しました",
+ "loc.messages.RemoveTempDir": "一時フォルダーを削除しています: %s",
+ "loc.messages.ExtractFailedCannotCreate": "一時保存場所を作成できなかったので、ファイル %s を抽出できませんでした: %s",
+ "loc.messages.CleanDestDir": "抽出前に宛先フォルダーをクリーニングしています: %s",
+ "loc.messages.CreateDestDir": "宛先フォルダーを作成しています: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Azure Blob Storage から JDK を取得しています。",
+ "loc.messages.RetrievingJdkFromLocalPath": "ローカル パスから JDK を取得しています。",
+ "loc.messages.SucceedMsg": "すべてのファイルが正常に抽出されました。",
+ "loc.messages.SetJavaHome": "JAVA_HOME を %s に設定しています",
+ "loc.messages.SetExtendedJavaHome": "%s を %s に設定しています",
+ "loc.messages.UnsupportedFileExtension": "指定した JDK ソース ファイルには、サポートされているファイル拡張子がありません。",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Azure 用のアクセス トークンをフェッチできませんでした。状態コード: %s、状態メッセージ: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "マネージド サービス プリンシパルのアクセス トークンをフェッチできませんでした。仮想マシンのマネージド サービス ID (MSI) を構成してください 'https://aka.ms/azure-msi-docs'。状態コード: %s、ステータス メッセージ: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "マネージド サービス プリンシパルのアクセス トークンをフェッチできませんでした。状態コード: %s、ステータス メッセージ: %s",
+ "loc.messages.ExpiredServicePrincipal": "Azure のアクセス トークンをフェッチできませんでした。使用されているサービス プリンシパルが有効であり、有効期限が切れていないことを確認してください。",
+ "loc.messages.CorrelationIdForARM": "ARM API 呼び出しの応答からの関連付け ID: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s はこのエージェントにプレインストールされていません",
+ "loc.messages.UsePreinstalledJava": "%s からプレインストールされた JDK を使用します",
+ "loc.messages.WrongArchiveStructure": "JDK ファイルが有効ではありません。JDK ファイルに 'bin' が含まれるルート フォルダーが 1 つだけ含まれているかどうかを確認してください。",
+ "loc.messages.WrongArchiveFile": "アーカイブ ファイルが正しくありません。JDK を含むフォルダーがありません",
+ "loc.messages.ShareAccessError": "ネットワーク共有リソースを使用できません: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "JDK ファイルはサポートされていません。JDK ファイルにフォルダーが 1 つだけ含まれているかどうかを確認してください。",
+ "loc.messages.NoPKGFile": "PKG ファイルが見つかりませんでした。",
+ "loc.messages.SeveralPKGFiles": "複数の PKG ファイルが見つかりました。",
+ "loc.messages.InstallJDK": "JDK をインストールしています。",
+ "loc.messages.AttachDiskImage": "ディスク イメージをアタッチしています。",
+ "loc.messages.DetachDiskImage": "ディスク イメージをデタッチしています。",
+ "loc.messages.PkgPathDoesNotExist": "パッケージ パスが存在しません。",
+ "loc.messages.PreInstalledJavaUpgraded": "プレインストール済みの JDK が更新されました。",
+ "loc.messages.JavaSuccessfullyInstalled": "Java は正常にインストールされました",
+ "loc.messages.ArchiveWasExtractedEarlier": "JDK が入ったアーカイブは以前に展開されました - 展開をスキップします",
+ "loc.messages.ExtractingArchiveToPath": "アーカイブの展開先: %s",
+ "loc.messages.ErrorCleaningFolder": "フォルダーのクリーンアップ エラー: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..2e11dea06c34
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Java 도구 설치 관리자",
+ "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?linkid=875287) 또는 [Java 설명서 참조](https://docs.oracle.com/java/)",
+ "loc.description": "사용자 제공 Azure Blob 또는 도구 캐시에서 특정 버전의 Java를 가져오고 JAVA_HOME을 설정합니다.",
+ "loc.instanceNameFormat": "Java $(versionSpec) 사용",
+ "loc.group.displayName.JavaInAzureGroup": "Azure Blob에서 Java 다운로드",
+ "loc.input.label.versionSpec": "JDK 버전",
+ "loc.input.help.versionSpec": "경로에서 사용할 수 있는 JDK 버전을 지정하는 숫자입니다. 10 등의 정수 버전을 사용합니다.",
+ "loc.input.label.jdkArchitectureOption": "JDK 아키텍처",
+ "loc.input.help.jdkArchitectureOption": "JDK의 아키텍처(x86, x64)입니다.",
+ "loc.input.label.jdkSourceOption": "JDK 소스",
+ "loc.input.help.jdkSourceOption": "압축된 JDK의 소스입니다.",
+ "loc.input.label.jdkFile": "JDK 파일",
+ "loc.input.help.jdkFile": "압축된 JDK가 있는 위치의 경로입니다. 이 경로는 소스 리포지토리나 에이전트의 로컬 경로에 있을 수 있습니다.",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure 구독",
+ "loc.input.help.azureResourceManagerEndpoint": "JDK에 대한 Azure Resource Manager 구독을 선택합니다.",
+ "loc.input.label.azureStorageAccountName": "저장소 계정 이름",
+ "loc.input.help.azureStorageAccountName": "Azure Classic 및 Resource Manager 저장소 계정이 나열됩니다. JDK가 있는 저장소 계정 이름을 선택합니다.",
+ "loc.input.label.azureContainerName": "컨테이너 이름",
+ "loc.input.help.azureContainerName": "JDK가 있는 저장소 계정에 있는 컨테이너 이름입니다.",
+ "loc.input.label.azureCommonVirtualFile": "공통 가상 경로",
+ "loc.input.help.azureCommonVirtualFile": "Azure Storage 컨테이너 내에 있는 JDK의 경로입니다.",
+ "loc.input.label.jdkDestinationDirectory": "대상 디렉터리",
+ "loc.input.help.jdkDestinationDirectory": "Linux 및 Windows에서 이 항목은 JDK 설치를위한 대상 디렉터리로 사용됩니다. macOS에서는 macOS가 특정 디렉터리에 JDK 설치를 지원하지 않으므로 이 디렉터리는 .dmg를 추출하기 위한 임시 폴더로 사용됩니다.",
+ "loc.input.label.azureResourceGroupName": "리소스 그룹 이름",
+ "loc.input.help.azureResourceGroupName": "스토리지 계정의 리소스 그룹 이름입니다.",
+ "loc.input.label.cleanDestinationDirectory": "대상 디렉터리 정리",
+ "loc.input.help.cleanDestinationDirectory": "JDK를 대상 디렉터리에 추출하기 전에 대상 디렉터리를 정리하려면 이 옵션을 선택합니다.",
+ "loc.input.label.createExtractDirectory": "추출할 디렉터리 만들기",
+ "loc.input.help.createExtractDirectory": "기본적으로 작업은 JDK를 추출하기 위해 이 JAVA_HOME_8_X64_OpenJDK_zip과 유사한 디렉터리를 작성합니다. 이 옵션을 사용하면 이 폴더 생성을 비활성화할 수 있습니다. 이 경우 JDK는 jdkDestinationDirectory의 루트에 있습니다.",
+ "loc.messages.DownloadFromAzureBlobStorage": "Azure Blob Storage에서 아티팩트를 다운로드하는 중입니다. 컨네이너 이름: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "항목 목록을 가져왔습니다.",
+ "loc.messages.StorageAccountDoesNotExist": "이름이 %s인 Azure Storage 계정을 가져오지 못했습니다.",
+ "loc.messages.RequestedUrlTooLong": "요청된 URL이 너무 깁니다. 일반적으로 구독에 많은 리소스 그룹이 있을 때 발생합니다. azureResourceGroupName 입력을 설정해 보세요.",
+ "loc.messages.UnzipExtractFile": "파일 압축을 푸는 중: %s",
+ "loc.messages.SevenZipExtractFile": "파일 압축을 푸는 중: %s",
+ "loc.messages.TarExtractFile": "파일 압축을 푸는 중: %s",
+ "loc.messages.ExtractFileFailedMsg": "%s 파일을 압축하지 못했습니다. \n코드: %d \nstdout: %s \nstderr: %s \n오류: %s;",
+ "loc.messages.ExtractNonExistFile": "%s 파일은 없으므로 압축하지 못했습니다.",
+ "loc.messages.ExtractDirFailed": "%s 파일은 디렉터리이므로 압축을 풀지 못했습니다.",
+ "loc.messages.CreateTempDir": "압축을 풀 임시 폴더 %s을(를) 만드는 중입니다. %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "%s에 있는 임시 tar 파일의 압축을 %s(으)로 풀었습니다.",
+ "loc.messages.RemoveTempDir": "임시 폴더를 제거하는 중입니다. %s",
+ "loc.messages.ExtractFailedCannotCreate": "임시 위치를 만들 수 없으므로 %s 파일을 압축하지 못했습니다. %s",
+ "loc.messages.CleanDestDir": "압축 전에 대상 폴더를 지우는 중입니다. %s",
+ "loc.messages.CreateDestDir": "대상 폴더를 지우는 중입니다. %s",
+ "loc.messages.RetrievingJdkFromAzure": "Azure Blob Storage에서 JDK를 검색하는 중입니다.",
+ "loc.messages.RetrievingJdkFromLocalPath": "로컬 경로에서 JDK를 검색하는 중입니다.",
+ "loc.messages.SucceedMsg": "모든 파일을 압축했습니다.",
+ "loc.messages.SetJavaHome": "JAVA_HOME이 %s(으)로 설정됩니다.",
+ "loc.messages.SetExtendedJavaHome": "%s이(가) %s(으)로 설정됩니다.",
+ "loc.messages.UnsupportedFileExtension": "지정한 JDK 소스 파일의 파일 확장명이 지원되지 않습니다.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Azure에 대한 액세스 토큰을 페치할 수 없습니다. 상태 코드: %s, 상태 메시지: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "관리 서비스 주체에 대한 액세스 토큰을 페치할 수 없습니다. 가상 머신에 대한 MSI(관리 서비스 ID)를 구성하세요('https://aka.ms/azure-msi-docs'). 상태 코드: %s, 상태 메시지: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "관리 서비스 주체에 대한 액세스 토큰을 페치할 수 없습니다. 상태 코드: %s, 상태 메시지: %s",
+ "loc.messages.ExpiredServicePrincipal": "Azure의 액세스 토큰을 페치할 수 없습니다. 사용한 서비스 주체가 유효하고 만료되지 않았는지 확인하세요.",
+ "loc.messages.CorrelationIdForARM": "ARM API 호출 응답의 상관 관계 ID: %s",
+ "loc.messages.JavaNotPreinstalled": "Java %s이(가) 이 에이전트에 사전 설치되지 않음",
+ "loc.messages.UsePreinstalledJava": "%s에서 사전 설치된 JDK 사용",
+ "loc.messages.WrongArchiveStructure": "JDK 파일이 잘못되었습니다. JDK 파일 안에 'bin'이 포함된 루트 폴더가 하나만 포함되어 있는지 확인하세요.",
+ "loc.messages.WrongArchiveFile": "보관 파일이 잘못되었습니다. JDK를 포함하는 폴더가 없습니다.",
+ "loc.messages.ShareAccessError": "네트워크 공유 리소스를 사용할 수 없음: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "JDK 파일이 지원되지 않습니다. JDK 파일 안에 정확하게 폴더가 하나 포함되어 있는지 확인하세요.",
+ "loc.messages.NoPKGFile": "PKG 파일을 찾을 수 없습니다.",
+ "loc.messages.SeveralPKGFiles": "PKG 파일을 두 개 이상 찾았습니다.",
+ "loc.messages.InstallJDK": "JDK를 설치하는 중입니다.",
+ "loc.messages.AttachDiskImage": "디스크 이미지를 연결합니다.",
+ "loc.messages.DetachDiskImage": "디스크 이미지를 분리하는 중입니다.",
+ "loc.messages.PkgPathDoesNotExist": "패키지 경로가 없습니다.",
+ "loc.messages.PreInstalledJavaUpgraded": "사전 설치된 JDK를 업데이트했습니다.",
+ "loc.messages.JavaSuccessfullyInstalled": "Java가 설치됨",
+ "loc.messages.ArchiveWasExtractedEarlier": "JDK를 사용한 보관 파일의 압축을 이전에 풀었습니다. 압축 풀기를 건너뜁니다.",
+ "loc.messages.ExtractingArchiveToPath": "%s에 보관 파일의 압축을 푸는 중",
+ "loc.messages.ErrorCleaningFolder": "폴더 정리 오류: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..cb469d9b97b5
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Установщик средств Java",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?linkid=875287) или [документацию по Java](https://docs.oracle.com/java/)",
+ "loc.description": "Получение определенной версии Java из предоставленного пользователем BLOB-объекта Azure или кэша инструментов и задание JAVA_HOME",
+ "loc.instanceNameFormat": "Использовать Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "Скачать Java из BLOB-объекта Azure",
+ "loc.input.label.versionSpec": "Версия JDK",
+ "loc.input.help.versionSpec": "Число, определяющее версию JDK, которая должна быть доступна по пути. Используйте целочисленный номер версии, например 10",
+ "loc.input.label.jdkArchitectureOption": "Архитектура JDK",
+ "loc.input.help.jdkArchitectureOption": "Архитектура JDK (x86, x64).",
+ "loc.input.label.jdkSourceOption": "Источник JDK",
+ "loc.input.help.jdkSourceOption": "Источник сжатого пакета JDK.",
+ "loc.input.label.jdkFile": "Файл JDK",
+ "loc.input.help.jdkFile": "Путь к месту, где находится сжатый пакет JDK. Путь может указывать на расположение в исходном репозитории или являться локальным путем на компьютере агента.",
+ "loc.input.label.azureResourceManagerEndpoint": "Подписка Azure",
+ "loc.input.help.azureResourceManagerEndpoint": "Выберите подписку Azure Resource Manager для JDK.",
+ "loc.input.label.azureStorageAccountName": "Имя учетной записи хранения",
+ "loc.input.help.azureStorageAccountName": "В списке приведены классические учетные записи хранения Azure и учетные записи хранения Resource Manager. Выберите имя учетной записи, в которой находится JDK.",
+ "loc.input.label.azureContainerName": "Имя контейнера",
+ "loc.input.help.azureContainerName": "Имя контейнера в учетной записи хранения, в которой находится JDK.",
+ "loc.input.label.azureCommonVirtualFile": "Общий виртуальный путь",
+ "loc.input.help.azureCommonVirtualFile": "Путь к JDK в контейнере службы хранилища Azure.",
+ "loc.input.label.jdkDestinationDirectory": "Каталог назначения",
+ "loc.input.help.jdkDestinationDirectory": "В Linux и Windows этот каталог используется в качестве каталога назначения для установки JDK. В macOS этот каталог используется в качестве временной папки для извлечения DMG-файла, так как macOS не поддерживает установку JDK в определенный каталог.",
+ "loc.input.label.azureResourceGroupName": "Имя группы ресурсов",
+ "loc.input.help.azureResourceGroupName": "Имя группы ресурсов для учетной записи хранения.",
+ "loc.input.label.cleanDestinationDirectory": "Очистить каталог назначения",
+ "loc.input.help.cleanDestinationDirectory": "Выберите этот параметр, чтобы очистить каталог назначения перед извлечением в него пакета JDK.",
+ "loc.input.label.createExtractDirectory": "Создать каталог для извлечения",
+ "loc.input.help.createExtractDirectory": "По умолчанию задача создает каталог, сходный с JAVA_HOME_8_X64_OpenJDK_zip, для извлечения JDK. Этот параметр позволяет отключить создание данной папки. В таком случае JDK будет расположен в корне jdkDestinationDirectory",
+ "loc.messages.DownloadFromAzureBlobStorage": "Скачиваются артефакты из хранилища BLOB-объектов Azure; имя контейнера: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "Список элементов успешно получен.",
+ "loc.messages.StorageAccountDoesNotExist": "Не удалось получить учетную запись хранения Azure с именем %s.",
+ "loc.messages.RequestedUrlTooLong": "Запрошенный URL-адрес слишком длинный. Обычно это происходит, когда в подписке много групп ресурсов. Попробуйте задать входные данные azureResourceGroupName.",
+ "loc.messages.UnzipExtractFile": "Извлекается файл: %s",
+ "loc.messages.SevenZipExtractFile": "Извлекается файл: %s",
+ "loc.messages.TarExtractFile": "Извлекается файл: %s",
+ "loc.messages.ExtractFileFailedMsg": "Сбой извлечения файла: %s \ncode: %d \nstdout: %s \nstderr: %s \nerror: %s;",
+ "loc.messages.ExtractNonExistFile": "Произошел сбой извлечения файла: %s, так как он не существует.",
+ "loc.messages.ExtractDirFailed": "Произошел сбой извлечения файла: %s, так как он является каталогом.",
+ "loc.messages.CreateTempDir": "Создание временной папки: %s для распаковки: %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "Распакован временный TAR-файл из: %s в: %s",
+ "loc.messages.RemoveTempDir": "Удаление временной папки: %s",
+ "loc.messages.ExtractFailedCannotCreate": "Произошел сбой извлечения файла: %s, так как не удалось создать временное расположение: %s",
+ "loc.messages.CleanDestDir": "Очистка папки назначения перед извлечением: %s",
+ "loc.messages.CreateDestDir": "Создание папки назначения: %s",
+ "loc.messages.RetrievingJdkFromAzure": "Пакет JDK извлекается из хранилища BLOB-объектов Azure.",
+ "loc.messages.RetrievingJdkFromLocalPath": "Пакет JDK извлекается из локального пути.",
+ "loc.messages.SucceedMsg": "Все файлы успешно извлечены.",
+ "loc.messages.SetJavaHome": "Переменной JAVA_HOME присваивается значение: %s",
+ "loc.messages.SetExtendedJavaHome": "%s присваивается значение: %s",
+ "loc.messages.UnsupportedFileExtension": "Расширение указанного исходного файла JDK не поддерживается.",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Не удалось получить маркер доступа для Azure. Код состояния: %s, сообщение о состоянии: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Настройте управляемое удостоверение службы (MSI) для виртуальной машины \"https://aka.ms/azure-msi-docs\". Код состояния: %s; сообщения о состоянии: %s.",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Код состояния: %s, сообщение о состоянии: %s.",
+ "loc.messages.ExpiredServicePrincipal": "Не удалось получить маркер доступа для Azure. Убедитесь, что используемый субъект-служба является допустимым, а срок его действия не истек.",
+ "loc.messages.CorrelationIdForARM": "Идентификатор корреляции из ответа на вызов API ARM: %s",
+ "loc.messages.JavaNotPreinstalled": "ПО Java %s не предустановлено на этом агенте.",
+ "loc.messages.UsePreinstalledJava": "Использовать предварительно установленное ПО JDK из %s.",
+ "loc.messages.WrongArchiveStructure": "Недопустимый файл JDK. Убедитесь, что файл JDK содержит только одну корневую папку с \"bin\".",
+ "loc.messages.WrongArchiveFile": "Неверный файл архива. Папки, содержащей JDK, не существует",
+ "loc.messages.ShareAccessError": "Общий сетевой ресурс недоступен: (%s).",
+ "loc.messages.UnsupportedDMGStructure": "Файл JDK не поддерживается. Убедитесь в том, что файл JDK содержит только одну папку.",
+ "loc.messages.NoPKGFile": "Не удалось найти файл PKG.",
+ "loc.messages.SeveralPKGFiles": "Обнаружено несколько файлов PKG.",
+ "loc.messages.InstallJDK": "Установка JDK.",
+ "loc.messages.AttachDiskImage": "Идет подключение образа диска.",
+ "loc.messages.DetachDiskImage": "Отключение образа диска.",
+ "loc.messages.PkgPathDoesNotExist": "Путь к пакету не существует.",
+ "loc.messages.PreInstalledJavaUpgraded": "Предварительно установленное ПО JDK обновлено.",
+ "loc.messages.JavaSuccessfullyInstalled": "ПО Java успешно установлено.",
+ "loc.messages.ArchiveWasExtractedEarlier": "Архив с JDK был извлечен ранее — пропуск извлечения.",
+ "loc.messages.ExtractingArchiveToPath": "Извлечение архива в каталог: %s",
+ "loc.messages.ErrorCleaningFolder": "Ошибка очистки папки: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..409daaa506c7
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "Java 工具安装程序",
+ "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?linkid=875287)或[参阅 Java 文档](https://docs.oracle.com/java/)",
+ "loc.description": "从用户提供的 Azure blob 或工具缓存中获取特定版本的 Java,并设置 JAVA_HOME",
+ "loc.instanceNameFormat": "使用 Java $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "从 Azure blob 下载 Java",
+ "loc.input.label.versionSpec": "JDK 版本",
+ "loc.input.help.versionSpec": "指定要在路径上提供的 JDK 版本的数字。使用整数版本,例如 10",
+ "loc.input.label.jdkArchitectureOption": "JDK 体系结构",
+ "loc.input.help.jdkArchitectureOption": "JDK 的体系结构(x86、x64)。",
+ "loc.input.label.jdkSourceOption": "JDK 源",
+ "loc.input.help.jdkSourceOption": "压缩 JDK 的源。",
+ "loc.input.label.jdkFile": "JDK 文件",
+ "loc.input.help.jdkFile": "压缩 JDK 所在的路径。该路径可能在源资料库中或是代理上的本地路径。",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure 订阅",
+ "loc.input.help.azureResourceManagerEndpoint": "为 JDK 选择 Azure Resource Manager 订阅。",
+ "loc.input.label.azureStorageAccountName": "存储帐户名称",
+ "loc.input.help.azureStorageAccountName": "列出了 Azure Classic 和资源管理器存储帐户。选择 JDK 所在的存储帐户名。",
+ "loc.input.label.azureContainerName": "容器名",
+ "loc.input.help.azureContainerName": "JDK 所在存储帐户中的容器的名称。",
+ "loc.input.label.azureCommonVirtualFile": "常见虚拟路径",
+ "loc.input.help.azureCommonVirtualFile": "JDK 在 Azure 存储容器中的路径。",
+ "loc.input.label.jdkDestinationDirectory": "目标目录",
+ "loc.input.help.jdkDestinationDirectory": "在 Linux 和 Windows 上,它用作 JDK 安装的目标目录。在 macOS 上,此目录用作提取 .dmg 文件的临时文件夹,因为 macOS 不支持将 JDK 安装到特定目录。",
+ "loc.input.label.azureResourceGroupName": "资源组名称",
+ "loc.input.help.azureResourceGroupName": "存储帐户的资源组名称。",
+ "loc.input.label.cleanDestinationDirectory": "清除目标目录",
+ "loc.input.help.cleanDestinationDirectory": "选择此选项,在将 JDK 提取到目标目录之前清除该目录。",
+ "loc.input.label.createExtractDirectory": "创建用于提取的目录",
+ "loc.input.help.createExtractDirectory": "默认情况下,任务将为提取 JDK 创建类似此 JAVA_HOME_8_X64_OpenJDK_zip 的目录。此选项允许禁用创建此文件夹,在这种情况下,JDK 将位于 jdkDestinationDirectory 的根中",
+ "loc.messages.DownloadFromAzureBlobStorage": "正在下载 Azure blob 存储中的项目,容器名称: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "已成功提取项列表",
+ "loc.messages.StorageAccountDoesNotExist": "无法获取名为 %s 的 Azure 存储帐户。",
+ "loc.messages.RequestedUrlTooLong": "请求的 URL 太长,订阅中有大量资源组时通常会发生这种情况,请尝试设置 azureResourceGroupName 输入。",
+ "loc.messages.UnzipExtractFile": "正在提取文件: %s",
+ "loc.messages.SevenZipExtractFile": "正在提取文件: %s",
+ "loc.messages.TarExtractFile": "正在提取文件: %s",
+ "loc.messages.ExtractFileFailedMsg": "文件 %s 提取失败 \n代码: %d \nStdOut: %s \nstderr: %s \n错误: %s;",
+ "loc.messages.ExtractNonExistFile": "文件 %s 提取失败,因为它不存在。",
+ "loc.messages.ExtractDirFailed": "文件 %s 提取失败,因为该文件是一个目录。",
+ "loc.messages.CreateTempDir": "创建临时文件夹 %s 以解压缩 %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "已将临时 tar 从 %s 解压缩到 %s",
+ "loc.messages.RemoveTempDir": "正在删除临时文件夹: %s",
+ "loc.messages.ExtractFailedCannotCreate": "文件 %s 提取失败,因为无法创建临时位置 %s",
+ "loc.messages.CleanDestDir": "提取前需清理目标文件夹: %s",
+ "loc.messages.CreateDestDir": "创建目标文件夹: %s",
+ "loc.messages.RetrievingJdkFromAzure": "正在检索 Azure blob 存储中的 JDK。",
+ "loc.messages.RetrievingJdkFromLocalPath": "正在检索本地路径中的 JDK。",
+ "loc.messages.SucceedMsg": "已成功提取所有文件。",
+ "loc.messages.SetJavaHome": "正在将 JAVA_HOME 设置为: %s",
+ "loc.messages.SetExtendedJavaHome": "正在将 %s 设置为: %s",
+ "loc.messages.UnsupportedFileExtension": "指定的 JDK 源文件没有受支持的文件扩展名。",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "无法提取 Azure 的访问令牌。状态代码: %s,状态消息: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "无法提取托管服务主体的访问令牌。请为虚拟机配置托管服务标识(MSI)(https://aka.ms/azure-msi-docs)。状态代码: %s,状态消息: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "无法提取托管服务主体的访问令牌。状态代码: %s,状态消息: %s",
+ "loc.messages.ExpiredServicePrincipal": "无法提取 Azure 的访问令牌。请确保使用的服务主体有效且未过期。",
+ "loc.messages.CorrelationIdForARM": "来自 ARM API 调用响应的相关 ID: %s",
+ "loc.messages.JavaNotPreinstalled": "在此代理上未预安装 Java %s",
+ "loc.messages.UsePreinstalledJava": "使用 %s 中的预安装 JDK",
+ "loc.messages.WrongArchiveStructure": "JDK 文件无效。验证 JDK 文件中是否只有一个根文件夹,其中包含 'bin' 文件夹。",
+ "loc.messages.WrongArchiveFile": "存档文件错误。没有任何包含 JDK 的文件夹",
+ "loc.messages.ShareAccessError": "网络共享资源不可用: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "JDK 文件不受支持。验证 JDK 文件中是否恰好包含一个文件夹。",
+ "loc.messages.NoPKGFile": "找不到 PKG 文件。",
+ "loc.messages.SeveralPKGFiles": "找到多个 PKG 文件。",
+ "loc.messages.InstallJDK": "正在安装 JDK。",
+ "loc.messages.AttachDiskImage": "附加数据映像。",
+ "loc.messages.DetachDiskImage": "正在分离磁盘映像。",
+ "loc.messages.PkgPathDoesNotExist": "包路径不存在。",
+ "loc.messages.PreInstalledJavaUpgraded": "预安装的 JDK 已更新。",
+ "loc.messages.JavaSuccessfullyInstalled": "已成功安装 Java",
+ "loc.messages.ArchiveWasExtractedEarlier": "之前已提取了 JDK 的存档 - 正在跳过提取",
+ "loc.messages.ExtractingArchiveToPath": "正在将存档提取到: %s",
+ "loc.messages.ErrorCleaningFolder": "文件夹清理错误: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..7aa6b2c5c13d
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,76 @@
+{
+ "loc.friendlyName": "JAVA 工具安裝程式",
+ "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?linkid=875287)或[參閱 Java 文件](https://docs.oracle.com/java/)",
+ "loc.description": "從使用者提供的 Azure Blob 或工具快取取得特定版本的 Java,並設定 JAVA_HOME",
+ "loc.instanceNameFormat": "使用 JAVA $(versionSpec)",
+ "loc.group.displayName.JavaInAzureGroup": "從 Azure Blob 下載 JAVA",
+ "loc.input.label.versionSpec": "JDK 版本",
+ "loc.input.help.versionSpec": "指定要在路徑上提供的 JDK 版本數字。請使用整數版本,例如 10",
+ "loc.input.label.jdkArchitectureOption": "JDK 架構",
+ "loc.input.help.jdkArchitectureOption": "JDK 的架構 (x86、x64)。",
+ "loc.input.label.jdkSourceOption": "JDK 來源",
+ "loc.input.help.jdkSourceOption": "壓縮的 JDK 來源。",
+ "loc.input.label.jdkFile": "JDK 檔案",
+ "loc.input.help.jdkFile": "壓縮的 JDK 所在位置路徑。路徑可以在您的來源存放庫中,也可以是代理程式上的本機路徑。",
+ "loc.input.label.azureResourceManagerEndpoint": "Azure 訂用帳戶",
+ "loc.input.help.azureResourceManagerEndpoint": "選擇 JDK 的 Azure Resource Manager 訂用帳戶。",
+ "loc.input.label.azureStorageAccountName": "儲存體帳戶名稱",
+ "loc.input.help.azureStorageAccountName": "列出 Azure 傳統和 Resource Manager 儲存體帳戶。請選取 JDK 所在儲存體帳戶的名稱。",
+ "loc.input.label.azureContainerName": "容器名稱",
+ "loc.input.help.azureContainerName": "JDK 所在儲存體帳戶中的容器名稱。",
+ "loc.input.label.azureCommonVirtualFile": "通用虛擬路徑",
+ "loc.input.help.azureCommonVirtualFile": "Azure 儲存體容器內的 JDK 路徑。",
+ "loc.input.label.jdkDestinationDirectory": "目的地目錄",
+ "loc.input.help.jdkDestinationDirectory": "在 Linux 和 Windows 上,這是作為 JDK 安裝的目的地目錄使用。在 macOS 上,這個目錄是作為解壓縮 .dmg 的暫存資料夾使用,因為 macOS 不支援將 JDK 安裝至特定目錄。",
+ "loc.input.label.azureResourceGroupName": "資源群組名稱",
+ "loc.input.help.azureResourceGroupName": "儲存體帳戶的資源群組名稱。",
+ "loc.input.label.cleanDestinationDirectory": "清理目的地目錄",
+ "loc.input.help.cleanDestinationDirectory": "選取此選項以先清理目的地目錄,再將 JDK 解壓縮到其中。",
+ "loc.input.label.createExtractDirectory": "建立用於解壓縮的目錄",
+ "loc.input.help.createExtractDirectory": "根據預設,工作會建立與這個 JAVA_HOME_8_X64_OpenJDK_zip 類似的目錄來解壓縮 JDK。此選項可讓您停用此資料夾的建立,在此情況下,JDK 會位於 jdkDestinationDirectory 的根目錄中",
+ "loc.messages.DownloadFromAzureBlobStorage": "正在從 Azure Blob 儲存體下載成品,容器名稱: %s",
+ "loc.messages.SuccessFullyFetchedItemList": "已成功擷取項目清單",
+ "loc.messages.StorageAccountDoesNotExist": "無法取得名稱為 %s 的 Azure 儲存體帳戶。",
+ "loc.messages.RequestedUrlTooLong": "要求的 URL 太長,這通常在您的訂用帳戶中有許多資源群組時會發生,請嘗試設定 azureResourceGroupName 輸入。",
+ "loc.messages.UnzipExtractFile": "正在解壓縮檔案: %s",
+ "loc.messages.SevenZipExtractFile": "正在解壓縮檔案: %s",
+ "loc.messages.TarExtractFile": "正在解壓縮檔案: %s",
+ "loc.messages.ExtractFileFailedMsg": "檔案 %s 解壓縮失敗\n代碼: %d\nStdOut: %s\nSTDERR: %s\n錯誤: %s;",
+ "loc.messages.ExtractNonExistFile": "因為檔案 %s 不存在,所以解壓縮失敗。",
+ "loc.messages.ExtractDirFailed": "因為檔案 %s 為目錄,所以解壓縮失敗。",
+ "loc.messages.CreateTempDir": "正在建立暫存資料夾 %s 以解壓縮 %s",
+ "loc.messages.TempDir": "tempFolder = %s",
+ "loc.messages.DecompressedTempTar": "已將暫存 tar 從 %s 解壓縮至 %s",
+ "loc.messages.RemoveTempDir": "正在移除暫存資料夾: %s",
+ "loc.messages.ExtractFailedCannotCreate": "因為無法建立暫存位置,所以檔案 %s 解壓縮失敗: %s",
+ "loc.messages.CleanDestDir": "正於擷取前清理目的地資料夾: %s",
+ "loc.messages.CreateDestDir": "正在建立目的地資料夾: %s",
+ "loc.messages.RetrievingJdkFromAzure": "正在從 Azure Blob 儲存體擷取 JDK。",
+ "loc.messages.RetrievingJdkFromLocalPath": "正在從本機路徑擷取 JDK。",
+ "loc.messages.SucceedMsg": "已成功解壓縮所有檔案。",
+ "loc.messages.SetJavaHome": "正在將 JAVA_HOME 設為: %s",
+ "loc.messages.SetExtendedJavaHome": "正在將 %s 設為: %s",
+ "loc.messages.UnsupportedFileExtension": "指定的 JDK 原始程式檔沒有支援的副檔名。",
+ "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "無法擷取 Azure 的存取權杖。狀態碼: %s,狀態訊息: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "無法擷取受控服務主體的存取權杖。請設定虛擬機器的受控服務識別 (MSI) (https://aka.ms/azure-msi-docs)。狀態碼: %s,狀態訊息: %s",
+ "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "無法擷取受控服務主體的存取權杖。狀態碼: %s,狀態訊息: %s",
+ "loc.messages.ExpiredServicePrincipal": "無法擷取 Azure 的存取權杖。請驗證使用的服務主體是否有效且未過期。",
+ "loc.messages.CorrelationIdForARM": "來自 ARM api 呼叫回應的相互關聯識別碼: %s",
+ "loc.messages.JavaNotPreinstalled": "JAVA %s 未預先安裝在此代理程式上",
+ "loc.messages.UsePreinstalledJava": "從 %s 使用預先安裝的 JDK",
+ "loc.messages.WrongArchiveStructure": "JDK 檔案無效。請驗證 JDK 檔案是否只包含一個 'bin' 的根資料夾。",
+ "loc.messages.WrongArchiveFile": "封存檔案錯誤。沒有包含 JDK 的資料夾",
+ "loc.messages.ShareAccessError": "無法使用網路共用資源: (%s)",
+ "loc.messages.UnsupportedDMGStructure": "不支援 JDK 檔案。請驗證 JDK 檔案是否正好只包含一個資料夾。",
+ "loc.messages.NoPKGFile": "找不到 PKG 檔案。",
+ "loc.messages.SeveralPKGFiles": "找到多個 PKG 檔案。",
+ "loc.messages.InstallJDK": "正在安裝 JDK。",
+ "loc.messages.AttachDiskImage": "正在附加磁碟映像。",
+ "loc.messages.DetachDiskImage": "正在中斷磁碟映像的連結。",
+ "loc.messages.PkgPathDoesNotExist": "套件路徑不存在。",
+ "loc.messages.PreInstalledJavaUpgraded": "預先安裝的 JDK 已更新。",
+ "loc.messages.JavaSuccessfullyInstalled": "JAVA 已成功安裝",
+ "loc.messages.ArchiveWasExtractedEarlier": "具有 JDK 的封存先前已解壓縮 - 即將跳過解壓縮",
+ "loc.messages.ExtractingArchiveToPath": "正在將封存解壓縮至: %s",
+ "loc.messages.ErrorCleaningFolder": "資料夾清除錯誤: %s"
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/Tests/L0.ts b/_generated/JavaToolInstallerV0_Node20/Tests/L0.ts
new file mode 100644
index 000000000000..b392114a571d
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Tests/L0.ts
@@ -0,0 +1,54 @@
+import assert = require('assert');
+import path = require('path');
+import os = require('os');
+import process = require('process');
+import fs = require('fs');
+
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('JavaToolInstaller L0 Suite', function () {
+ it('should fail when JavaToolInstaller is run with no azure server endpoint', function () {
+ this.timeout(20000);
+
+ const testPath: string = path.join(__dirname, 'L0FailsIfNoAzureEndpointSet.js');
+ const testRunner: ttm.MockTestRunner = new ttm.MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ });
+
+ it('should run successfully when fetching JDK files from azure storage', function () {
+ this.timeout(20000);
+
+ const testPath: string = path.join(__dirname, 'L0DownloadsJdkFromAzureStorage.js');
+ const testRunner: ttm.MockTestRunner = new ttm.MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.succeeded, 'task should have succeeded.');
+ });
+
+ it('should run successfully when fetching JDK files from azure storage from subfolder', function () {
+ this.timeout(20000);
+
+ const testPath: string = path.join(__dirname, 'L0DownloadsJdkFromAzureStorageSubFolder.js');
+ const testRunner: ttm.MockTestRunner = new ttm.MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert((testRunner.stdOutContained('jdkFileName: DestinationDirectory\\JDKname.tar.gz') || testRunner.stdOutContained('jdkFileName: DestinationDirectory/JDKname.tar.gz')) , 'JDK archive should unpack in the right destination directory');
+ assert(testRunner.succeeded, 'task should have succeeded.');
+ });
+
+ it('should fail when JavaToolInstaller is run with to destination folder specified', function () {
+ this.timeout(20000);
+
+ const testPath: string = path.join(__dirname, 'L0NoDestinationFolder.js');
+ const testRunner: ttm.MockTestRunner = new ttm.MockTestRunner(testPath);
+
+ testRunner.run();
+
+ assert(testRunner.failed, 'task should have failed');
+ });
+});
diff --git a/_generated/JavaToolInstallerV0_Node20/Tests/L0DownloadsJdkFromAzureStorage.ts b/_generated/JavaToolInstallerV0_Node20/Tests/L0DownloadsJdkFromAzureStorage.ts
new file mode 100644
index 000000000000..ae924b721fe4
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Tests/L0DownloadsJdkFromAzureStorage.ts
@@ -0,0 +1,119 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import msRestAzure = require('azure-pipelines-tasks-azure-arm-rest/azure-arm-common');
+import path = require('path');
+import mockTask = require('azure-pipelines-task-lib/mock-task');
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSourceOption", "AzureStorage")
+tr.setInput("jdkArchitectureOption", "x64");
+tr.setInput("azureResourceManagerEndpoint", "ARM1");
+tr.setInput("azureStorageAccountName", "storage1");
+tr.setInput("azureContainerName", "container1");
+tr.setInput("azureCommonVirtualFile", "JDKname.tar.gz");
+tr.setInput("jdkDestinationDirectory", "DestinationDirectory");
+tr.setInput("cleanDestinationDirectory", "false");
+
+process.env['AGENT_TOOLSDIRECTORY'] = '/tool';
+process.env['AGENT_VERSION'] = '2.194.0';
+
+process.env['ENDPOINT_URL_ID1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_username'] = 'dummyusername';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_password'] = 'dummypassword';
+process.env['ENDPOINT_DATA_ID1_acceptUntrustedCerts'] = 'true';
+
+process.env['ENDPOINT_URL_ARM1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_serviceprincipalid'] = 'dummyid';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_serviceprincipalkey'] = 'dummykey';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_tenantid'] = 'dummyTenantid';
+process.env['ENDPOINT_DATA_ARM1_environmentAuthorityUrl'] = 'dummyurl';
+process.env['ENDPOINT_DATA_ARM1_activeDirectoryServiceEndpointResourceId'] = 'dummyResourceId';
+process.env['ENDPOINT_DATA_ARM1_subscriptionId'] = 'dummySubscriptionId';
+
+const a: ma.TaskLibAnswers = {
+ "stats": {
+ "DestinationDirectory\\JDKname.tar.gz": true,
+ "DestinationDirectory/JDKname.tar.gz": true,
+ },
+ "find": {
+ "DestinationDirectory": ["rootJDK/", "rootJDK/secondlevelJDK2"],
+ },
+};
+
+tr.setAnswers(a);
+
+tr.registerMock("azure-pipelines-tasks-azure-arm-rest/azure-arm-storage", {
+ StorageManagementClient: function (A, B) {
+ return {
+ storageAccounts: {
+ get: function (A) {
+ return {
+ properties: {
+ primaryEndpoints: {
+ blob: "primaryBlobUrl"
+ }
+ },
+ id: "StorageAccountUrl"
+ }
+ },
+ listkeys: function (A, B, C) {
+ return ["accesskey1", "accessKey2"];
+ }
+ }
+ }
+ },
+ StorageAccounts: {
+ getResourceGroupNameFromUri: function (A) {
+ return "storageAccountResouceGroupName";
+ }
+ }
+});
+
+tr.registerMock("azure-pipelines-tasks-azure-arm-rest/azure-arm-common", {
+ ApplicationTokenCredentials: function(A,B,C,D,E,F,G) {
+ return {};
+ }
+});
+
+tr.registerMock('./AzureStorageArtifacts/AzureStorageArtifactDownloader',{
+ AzureStorageArtifactDownloader: function(A,B,C) {
+ return {
+ downloadArtifacts: function(A,B) {
+ return "pathFromDownloader";
+ }
+ }
+ }
+})
+
+const mtl = require("azure-pipelines-tool-lib/tool")
+const mtlClone = Object.assign({}, mtl);
+
+mtlClone.prependPath = function(variable1: string, variable2: string) {
+ return {};
+};
+
+tr.registerMock("azure-pipelines-tool-lib/tool", mtlClone);
+
+const mfs = require('fs')
+const mfsClone = Object.assign({}, mfs);
+
+mfsClone.lstatSync = function(variable: string) {
+ return {
+ isDirectory: function() {
+ return true;
+ }
+ };
+};
+
+mfsClone.existsSync = function (variable: string) {
+ if (variable === "DestinationDirectory\\econdlevelJDK2" || variable === "DestinationDirectory/econdlevelJDK2") {
+ return false;
+ } else return true;
+}
+
+tr.registerMock('fs', mfsClone);
+
+tr.run();
diff --git a/_generated/JavaToolInstallerV0_Node20/Tests/L0DownloadsJdkFromAzureStorageSubFolder.ts b/_generated/JavaToolInstallerV0_Node20/Tests/L0DownloadsJdkFromAzureStorageSubFolder.ts
new file mode 100644
index 000000000000..5176ce747802
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Tests/L0DownloadsJdkFromAzureStorageSubFolder.ts
@@ -0,0 +1,120 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import msRestAzure = require('azure-pipelines-tasks-azure-arm-rest/azure-arm-common');
+import path = require('path');
+import mockTask = require('azure-pipelines-task-lib/mock-task');
+
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSourceOption", "AzureStorage")
+tr.setInput("jdkArchitectureOption", "x64");
+tr.setInput("azureResourceManagerEndpoint", "ARM1");
+tr.setInput("azureStorageAccountName", "storage1");
+tr.setInput("azureContainerName", "container1");
+tr.setInput("azureCommonVirtualFile", "folder/JDKname.tar.gz");
+tr.setInput("jdkDestinationDirectory", "DestinationDirectory");
+tr.setInput("cleanDestinationDirectory", "true");
+
+process.env['AGENT_TOOLSDIRECTORY'] = '/tool';
+process.env['AGENT_VERSION'] = '2.194.0';
+
+process.env['ENDPOINT_URL_ID1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_username'] = 'dummyusername';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_password'] = 'dummypassword';
+process.env['ENDPOINT_DATA_ID1_acceptUntrustedCerts'] = 'true';
+
+process.env['ENDPOINT_URL_ARM1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_serviceprincipalid'] = 'dummyid';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_serviceprincipalkey'] = 'dummykey';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_tenantid'] = 'dummyTenantid';
+process.env['ENDPOINT_DATA_ARM1_environmentAuthorityUrl'] = 'dummyurl';
+process.env['ENDPOINT_DATA_ARM1_activeDirectoryServiceEndpointResourceId'] = 'dummyResourceId';
+process.env['ENDPOINT_DATA_ARM1_subscriptionId'] = 'dummySubscriptionId';
+
+const a: ma.TaskLibAnswers = {
+ "stats": {
+ "DestinationDirectory\\JDKname.tar.gz": true,
+ "DestinationDirectory/JDKname.tar.gz": true,
+ },
+ "find": {
+ "DestinationDirectory": ["rootJDK/", "rootJDK/secondlevelJDK2"],
+ },
+};
+
+tr.setAnswers(a);
+
+tr.registerMock("azure-pipelines-tasks-azure-arm-rest/azure-arm-storage", {
+ StorageManagementClient: function (A, B) {
+ return {
+ storageAccounts: {
+ get: function (A) {
+ return {
+ properties: {
+ primaryEndpoints: {
+ blob: "primaryBlobUrl"
+ }
+ },
+ id: "StorageAccountUrl"
+ }
+ },
+ listkeys: function (A, B, C) {
+ return ["accesskey1", "accessKey2"];
+ }
+ }
+ }
+ },
+ StorageAccounts: {
+ getResourceGroupNameFromUri: function (A) {
+ return "storageAccountResouceGroupName";
+ }
+ }
+});
+
+tr.registerMock("azure-pipelines-tasks-azure-arm-rest/azure-arm-common", {
+ ApplicationTokenCredentials: function(A,B,C,D,E,F,G) {
+ return {};
+ }
+});
+
+tr.registerMock('./AzureStorageArtifacts/AzureStorageArtifactDownloader',{
+ AzureStorageArtifactDownloader: function(A,B,C) {
+ return {
+ downloadArtifacts: function(A,B) {
+ return "pathFromDownloader";
+ }
+ }
+ }
+})
+
+const mtl = require("azure-pipelines-tool-lib/tool")
+const mtlClone = Object.assign({}, mtl);
+
+mtlClone.prependPath = function(variable1: string, variable2: string) {
+ return {};
+};
+
+tr.registerMock("azure-pipelines-tool-lib/tool", mtlClone);
+
+const mfs = require('fs')
+const mfsClone = Object.assign({}, mfs);
+
+mfsClone.lstatSync = function(variable: string) {
+ return {
+ isDirectory: function() {
+ return true;
+ }
+ };
+};
+
+mfsClone.existsSync = function (variable: string) {
+ if (variable === "DestinationDirectory\\econdlevelJDK2" || variable === "DestinationDirectory/econdlevelJDK2" ) {
+ return false;
+ } else return true;
+}
+
+tr.registerMock('fs', mfsClone);
+
+tr.run();
diff --git a/_generated/JavaToolInstallerV0_Node20/Tests/L0FailsIfNoAzureEndpointSet.ts b/_generated/JavaToolInstallerV0_Node20/Tests/L0FailsIfNoAzureEndpointSet.ts
new file mode 100644
index 000000000000..2f6cff855c76
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Tests/L0FailsIfNoAzureEndpointSet.ts
@@ -0,0 +1,25 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+import mockTask = require('azure-pipelines-task-lib/mock-task');
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSource", "Azure Storage")
+tr.setInput("artifactProvider", "azureStorage");
+tr.setInput("azureResourceManagerEndpoint", "ARM1");
+tr.setInput("azureStorageAccountName", "storage1");
+tr.setInput("azureContainerName", "container1");
+tr.setInput("azureCommonVirtualPath", "");
+tr.setInput("fileType", ".tar.gz");
+tr.setInput("destinationFolder", "javaJDK");
+tr.setInput("cleanDestinationFolder", "false");
+
+process.env['ENDPOINT_URL_ID1'] = 'http://url';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_username'] = 'dummyusername';
+process.env['ENDPOINT_AUTH_PARAMETER_connection1_password'] = 'dummypassword';
+process.env['ENDPOINT_DATA_ID1_acceptUntrustedCerts'] = 'true';
+
+tr.run();
diff --git a/_generated/JavaToolInstallerV0_Node20/Tests/L0NoDestinationFolder.ts b/_generated/JavaToolInstallerV0_Node20/Tests/L0NoDestinationFolder.ts
new file mode 100644
index 000000000000..3f07ecae38ad
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Tests/L0NoDestinationFolder.ts
@@ -0,0 +1,23 @@
+import mockanswer = require('azure-pipelines-task-lib/mock-answer');
+import mockrun = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const srcPath = 'source/foo.zip';
+const destDir = '/destDir';
+const tr: mockrun.TaskMockRunner = new mockrun.TaskMockRunner(taskPath);
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSource", "Local Directory")
+tr.setInput("jdkPath", srcPath);
+//tr.setInput('destinationFolder', 'dirName');
+tr.setInput("cleanDestinationFolder", "false");
+
+// provide answers for task mock
+const a: mockanswer.TaskLibAnswers = {
+ checkPath: { },
+ find: { },
+ rmRF: { },
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JavaToolInstallerV0_Node20/Tests/L0UnzipTest.ts b/_generated/JavaToolInstallerV0_Node20/Tests/L0UnzipTest.ts
new file mode 100644
index 000000000000..378ef197c321
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/Tests/L0UnzipTest.ts
@@ -0,0 +1,98 @@
+import mockanswer = require('azure-pipelines-task-lib/mock-answer');
+import mockrun = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+var Q = require('q');
+
+const taskPath = path.join(__dirname, '..', 'javatoolinstaller.js');
+const srcPath = 'source/foo.zip';
+const destDir = '/destDir';
+
+// task parameters
+const tr: mockrun.TaskMockRunner = new mockrun.TaskMockRunner(taskPath);
+tr.setInput("versionSpec", "8.1");
+tr.setInput("jdkSourceOption", "Local Directory");
+tr.setInput("jdkFile", srcPath);
+tr.setInput("jdkDestinationDirectory", destDir);
+tr.setInput("cleanDestinationDirectory", "false");
+tr.setInput("jdkArchitectureOption", "x64");
+
+// set windir
+process.env.windir = 'windir';
+
+// provide answers for task mock
+const a: mockanswer.TaskLibAnswers = {
+ exist: {[destDir]: true},
+ which: {'windir\\system32\\chcp.com': 'windir\\system32\\chcp.com'},
+ checkPath: {'windir\\system32\\chcp.com': true },
+ find: {[destDir]: [destDir]},
+ rmRF: { },
+ osType: {'osType': 'Win32'},
+ stats: {[destDir]: {'isDirectory':'true'}, 'source\\foo.zip': {'isFile':'true'}, '/destDir/foo': {'isDirectory':'true'}},
+};
+tr.setAnswers(a);
+
+// toolrunner that mimicks modification of the directory structure following a powershell unzip command
+var MockToolRunner = function (tool) {
+ var _tool;
+ var _line;
+ var _args;
+
+ this.init = function(tool) {
+ this._tool = tool;
+ };
+
+ this.arg = function (args) {
+ this._args = args;
+ return this;
+ };
+
+ this.line = function (val) {
+ this._line = val;
+ return this;
+ };
+
+ this.exec = function (options) {
+ var _this = this;
+ var defer = Q.defer();
+ console.log('exec: ' + _this._tool + ' line: ' + _this._line + ' args: ' + _this._args);
+
+ // Simulate some asynchronous event through timer
+ setTimeout(function() {
+ if (_this._tool == 'powershell') {
+ // update to pretend an unzip actually occurred
+ a.find = {[destDir]: [destDir, '/destDir/foo']};
+ console.log('directories updated: ' + a.find[destDir]);
+ }
+ defer.resolve(0);
+ }, 100);
+ return defer.promise;
+ };
+
+ this.execSync = function(options) {
+ console.log('execSync: ' + this._tool + ' line: ' + this._line + ' args: ' + this._args);
+ return this;
+ };
+
+ this.init(tool);
+};
+
+tr.registerMockExport('tool', function(tool){
+ return new MockToolRunner(tool);
+});
+
+// tool mock
+tr.registerMock('vsts-task-tool-lib/tool', {
+ debug: function(message) {
+ console.log('##debug : ' + message);
+ },
+
+ findLocalToolVersions: function(fileName) {
+ return null;
+ },
+ evaluateVersions: function(fileName) {
+ return null;
+ }
+});
+
+tr.run();
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/ThirdPartyNotice.txt b/_generated/JavaToolInstallerV0_Node20/ThirdPartyNotice.txt
new file mode 100644
index 000000000000..afb44de23d53
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/ThirdPartyNotice.txt
@@ -0,0 +1,4743 @@
+
+THIRD-PARTY SOFTWARE NOTICES AND INFORMATION
+Do Not Translate or Localize
+
+This Azure DevOps extension (JavaToolInstallerV0) is based on or incorporates material from the projects listed below (Third Party IP). The original copyright notice and the license under which Microsoft received such Third Party IP, are set forth below. Such licenses and notices are provided for informational purposes only. Microsoft licenses the Third Party IP to you under the licensing terms for the Azure DevOps extension. Microsoft reserves all other rights not expressly granted under this agreement, whether by implication, estoppel or otherwise.
+
+1. @types/mocha (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+2. @types/node (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+3. @types/q (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+4. @types/semver (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+5. @types/uuid (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git)
+6. align-text (git://github.com/jonschlinkert/align-text.git)
+7. amdefine (git+https://github.com/jrburke/amdefine.git)
+8. ansi-regex (git+https://github.com/chalk/ansi-regex.git)
+9. ansi-styles (git+https://github.com/chalk/ansi-styles.git)
+10. artifact-engine (https://github.com/Microsoft/azure-pipelines-extensions/tree/master/Extensions/ArtifactEngine)
+11. asn1 (git://github.com/joyent/node-asn1.git)
+12. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+13. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+14. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+15. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+16. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+17. assert-plus (git+https://github.com/mcavage/node-assert-plus.git)
+18. async (git+https://github.com/caolan/async.git)
+19. async (git+https://github.com/caolan/async.git)
+20. aws-sign2 (git+https://github.com/mikeal/aws-sign.git)
+21. aws4 (git+https://github.com/mhart/aws4.git)
+22. azure-storage (git+ssh://git@github.com/Azure/azure-storage-node.git)
+23. balanced-match (git://github.com/juliangruber/balanced-match.git)
+24. balanced-match (git://github.com/juliangruber/balanced-match.git)
+25. bcrypt-pbkdf (git://github.com/joyent/node-bcrypt-pbkdf.git)
+26. bl (git+https://github.com/rvagg/bl.git)
+27. boom (git://github.com/hapijs/boom.git)
+28. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+29. brace-expansion (git://github.com/juliangruber/brace-expansion.git)
+30. browser-stdout (git+ssh://git@github.com/kumavis/browser-stdout.git)
+31. browserify-mime (git+https://github.com/broofa/node-mime.git)
+32. buffer-equal-constant-time (git+ssh://git@github.com/goinstant/buffer-equal-constant-time.git)
+33. camelcase (git+https://github.com/sindresorhus/camelcase.git)
+34. caseless (git+https://github.com/mikeal/caseless.git)
+35. center-align (git+https://github.com/jonschlinkert/center-align.git)
+36. chalk (git+https://github.com/chalk/chalk.git)
+37. cliui (git+ssh://git@github.com/bcoe/cliui.git)
+38. combined-stream (git://github.com/felixge/node-combined-stream.git)
+39. commander (git+https://github.com/tj/commander.js.git)
+40. commander (git+https://github.com/tj/commander.js.git)
+41. concat-map (git://github.com/substack/node-concat-map.git)
+42. concat-map (git://github.com/substack/node-concat-map.git)
+43. core-util-is (git://github.com/isaacs/core-util-is.git)
+44. cryptiles (git://github.com/hapijs/cryptiles.git)
+45. dashdash (git://github.com/trentm/node-dashdash.git)
+46. debug (git://github.com/visionmedia/debug.git)
+47. decamelize (git+https://github.com/sindresorhus/decamelize.git)
+48. delayed-stream (git://github.com/felixge/node-delayed-stream.git)
+49. diff (git://github.com/kpdecker/jsdiff.git)
+50. ecc-jsbn (git+https://github.com/quartzjer/ecc-jsbn.git)
+51. ecdsa-sig-formatter (git+ssh://git@github.com/Brightspace/node-ecdsa-sig-formatter.git)
+52. escape-string-regexp (git+https://github.com/sindresorhus/escape-string-regexp.git)
+53. escape-string-regexp (git+https://github.com/sindresorhus/escape-string-regexp.git)
+54. extend (git+https://github.com/justmoon/node-extend.git)
+55. extend (git+https://github.com/justmoon/node-extend.git)
+56. extsprintf (git://github.com/davepacheco/node-extsprintf.git)
+57. forever-agent (git+https://github.com/mikeal/forever-agent.git)
+58. form-data (git://github.com/form-data/form-data.git)
+59. fs.realpath (git+https://github.com/isaacs/fs.realpath.git)
+60. generate-function (git+https://github.com/mafintosh/generate-function.git)
+61. generate-object-property (git+https://github.com/mafintosh/generate-object-property.git)
+62. getpass (git+https://github.com/arekinath/node-getpass.git)
+63. glob (git://github.com/isaacs/node-glob.git)
+64. growl (git://github.com/tj/node-growl.git)
+65. handlebars (git+https://github.com/wycats/handlebars.js.git)
+66. har-validator (git+https://github.com/ahmadnassri/har-validator.git)
+67. has-ansi (git+https://github.com/sindresorhus/has-ansi.git)
+68. has-flag (git+https://github.com/sindresorhus/has-flag.git)
+69. hash-base (git+https://github.com/crypto-browserify/hash-base.git)
+70. hawk (git://github.com/hueniverse/hawk.git)
+71. he (git+https://github.com/mathiasbynens/he.git)
+72. hoek (git://github.com/hapijs/hoek.git)
+73. http-signature (git://github.com/joyent/node-http-signature.git)
+74. inflight (git+https://github.com/npm/inflight.git)
+75. inherits (git://github.com/isaacs/inherits.git)
+76. inherits (git://github.com/isaacs/inherits.git)
+77. is-buffer (git://github.com/feross/is-buffer.git)
+78. is-my-ip-valid (git+https://github.com/LinusU/is-my-ip-valid.git)
+79. is-my-json-valid (git+https://github.com/mafintosh/is-my-json-valid.git)
+80. is-property (git://github.com/mikolalysenko/is-property.git)
+81. is-typedarray (git://github.com/hughsk/is-typedarray.git)
+82. isarray (git://github.com/juliangruber/isarray.git)
+83. isemail (git+https://github.com/hapijs/isemail.git)
+84. isstream (git+https://github.com/rvagg/isstream.git)
+85. joi (git://github.com/hapijs/joi.git)
+86. jsbn (git+https://github.com/andyperlitch/jsbn.git)
+87. json-edm-parser (git+https://github.com/yaxia/json-edm-parser.git)
+88. json-schema (git+ssh://git@github.com/kriszyp/json-schema.git)
+89. json-stringify-safe (git://github.com/isaacs/json-stringify-safe.git)
+90. jsonparse (git+ssh://git@github.com/creationix/jsonparse.git)
+91. jsonpointer (git+ssh://git@github.com/janl/node-jsonpointer.git)
+92. jsonwebtoken (git+https://github.com/auth0/node-jsonwebtoken.git)
+93. jsprim (git://github.com/joyent/node-jsprim.git)
+94. jwa (git://github.com/brianloveswords/node-jwa.git)
+95. jws (git://github.com/brianloveswords/node-jws.git)
+96. kind-of (git+https://github.com/jonschlinkert/kind-of.git)
+97. lazy-cache (git+https://github.com/jonschlinkert/lazy-cache.git)
+98. lodash (git+https://github.com/lodash/lodash.git)
+99. lodash.once (git+https://github.com/lodash/lodash.git)
+100. longest (git+https://github.com/jonschlinkert/longest.git)
+101. md5.js (git+https://github.com/crypto-browserify/md5.js.git)
+102. mime-db (git+https://github.com/jshttp/mime-db.git)
+103. mime-types (git+https://github.com/jshttp/mime-types.git)
+104. minimatch (git://github.com/isaacs/minimatch.git)
+105. minimatch (git://github.com/isaacs/minimatch.git)
+106. minimatch (git://github.com/isaacs/minimatch.git)
+107. minimist (git://github.com/substack/minimist.git)
+108. minimist (git://github.com/substack/minimist.git)
+109. mkdirp (git+https://github.com/substack/node-mkdirp.git)
+110. mocha (git+https://github.com/mochajs/mocha.git)
+111. mockery (git://github.com/mfncooper/mockery.git)
+112. moment (git+https://github.com/moment/moment.git)
+113. ms (git+https://github.com/zeit/ms.git)
+114. ms (git+https://github.com/zeit/ms.git)
+115. node-uuid (git+https://github.com/broofa/node-uuid.git)
+116. oauth-sign (git+https://github.com/mikeal/oauth-sign.git)
+117. once (git://github.com/isaacs/once.git)
+118. optimist (git+ssh://git@github.com/substack/node-optimist.git)
+119. path-is-absolute (git+https://github.com/sindresorhus/path-is-absolute.git)
+120. pinkie (git+https://github.com/floatdrop/pinkie.git)
+121. pinkie-promise (git+https://github.com/floatdrop/pinkie-promise.git)
+122. process-nextick-args (git+https://github.com/calvinmetcalf/process-nextick-args.git)
+123. punycode (git+https://github.com/bestiejs/punycode.js.git)
+124. q (git://github.com/kriskowal/q.git)
+125. qs (git+https://github.com/ljharb/qs.git)
+126. readable-stream (git://github.com/nodejs/readable-stream.git)
+127. repeat-string (git+https://github.com/jonschlinkert/repeat-string.git)
+128. request (git+https://github.com/request/request.git)
+129. right-align (git://github.com/jonschlinkert/right-align.git)
+130. safe-buffer (git://github.com/feross/safe-buffer.git)
+131. safer-buffer (git+https://github.com/ChALkeR/safer-buffer.git)
+132. sax (git://github.com/isaacs/sax-js.git)
+133. semver (git+https://github.com/npm/node-semver.git)
+134. semver-compare (git://github.com/substack/semver-compare.git)
+135. shelljs (git://github.com/arturadib/shelljs.git)
+136. sntp (git://github.com/hueniverse/sntp.git)
+137. source-map (git+ssh://git@github.com/mozilla/source-map.git)
+138. source-map (git+ssh://git@github.com/mozilla/source-map.git)
+139. sshpk (git+https://github.com/arekinath/node-sshpk.git)
+140. string_decoder (git://github.com/rvagg/string_decoder.git)
+141. stringstream (git+https://github.com/mhart/StringStream.git)
+142. strip-ansi (git+https://github.com/chalk/strip-ansi.git)
+143. supports-color (git+https://github.com/chalk/supports-color.git)
+144. supports-color (git+https://github.com/chalk/supports-color.git)
+145. topo (git://github.com/hapijs/topo.git)
+146. tough-cookie (git://github.com/salesforce/tough-cookie.git)
+147. tunnel (git+https://github.com/koichik/node-tunnel.git)
+148. tunnel-agent (git+https://github.com/mikeal/tunnel-agent.git)
+149. tweetnacl (git+https://github.com/dchest/tweetnacl-js.git)
+150. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+151. typed-rest-client (git+https://github.com/Microsoft/typed-rest-client.git)
+152. uglify-js (git+https://github.com/mishoo/UglifyJS2.git)
+153. uglify-to-browserify (git+https://github.com/ForbesLindesay/uglify-to-browserify.git)
+154. underscore (git://github.com/jashkenas/underscore.git)
+155. util-deprecate (git://github.com/TooTallNate/util-deprecate.git)
+156. uuid (git+https://github.com/kelektiv/node-uuid.git)
+157. validator (git+ssh://git@github.com/chriso/validator.js.git)
+158. verror (git://github.com/davepacheco/node-verror.git)
+159. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git)
+160. vsts-task-tool-lib (git+https://github.com/microsoft/vsts-task-installer-lib.git)
+161. window-size (git+https://github.com/jonschlinkert/window-size.git)
+162. wordwrap (git://github.com/substack/node-wordwrap.git)
+163. wordwrap (git://github.com/substack/node-wordwrap.git)
+164. wrappy (git+https://github.com/npm/wrappy.git)
+165. xml2js (git+https://github.com/Leonidas-from-XIV/node-xml2js.git)
+166. xmlbuilder (git://github.com/oozcitak/xmlbuilder-js.git)
+167. xtend (git://github.com/Raynos/xtend.git)
+168. yargs (git+ssh://git@github.com/bcoe/yargs.git)
+
+
+%% @types/mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/mocha NOTICES, INFORMATION, AND LICENSE
+
+%% @types/node NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/node NOTICES, INFORMATION, AND LICENSE
+
+%% @types/q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/q NOTICES, INFORMATION, AND LICENSE
+
+%% @types/semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/semver NOTICES, INFORMATION, AND LICENSE
+
+%% @types/uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF @types/uuid NOTICES, INFORMATION, AND LICENSE
+
+%% align-text NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF align-text NOTICES, INFORMATION, AND LICENSE
+
+%% amdefine NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+amdefine is released under two licenses: new BSD, and MIT. You may pick the
+license that best suits your development needs. The text of both licenses are
+provided below.
+
+
+The "New" BSD License:
+----------------------
+
+Copyright (c) 2011-2016, The Dojo Foundation
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the Dojo Foundation nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+MIT License
+-----------
+
+Copyright (c) 2011-2016, The Dojo Foundation
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF amdefine NOTICES, INFORMATION, AND LICENSE
+
+%% ansi-regex NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF ansi-regex NOTICES, INFORMATION, AND LICENSE
+
+%% ansi-styles NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF ansi-styles NOTICES, INFORMATION, AND LICENSE
+
+%% artifact-engine NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF artifact-engine NOTICES, INFORMATION, AND LICENSE
+
+%% asn1 NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2011 Mark Cavage, All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE
+=========================================
+END OF asn1 NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% assert-plus NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF assert-plus NOTICES, INFORMATION, AND LICENSE
+
+%% async NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2010-2014 Caolan McMahon
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF async NOTICES, INFORMATION, AND LICENSE
+
+%% async NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2010-2018 Caolan McMahon
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF async NOTICES, INFORMATION, AND LICENSE
+
+%% aws-sign2 NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF aws-sign2 NOTICES, INFORMATION, AND LICENSE
+
+%% aws4 NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2013 Michael Hart (michael.hart.au@gmail.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF aws4 NOTICES, INFORMATION, AND LICENSE
+
+%% azure-storage NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+=========================================
+END OF azure-storage NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(MIT)
+
+Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF balanced-match NOTICES, INFORMATION, AND LICENSE
+
+%% bcrypt-pbkdf NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The Blowfish portions are under the following license:
+
+Blowfish block cipher for OpenBSD
+Copyright 1997 Niels Provos
+All rights reserved.
+
+Implementation advice by David Mazieres .
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+
+The bcrypt_pbkdf portions are under the following license:
+
+Copyright (c) 2013 Ted Unangst
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+
+
+Performance improvements (Javascript-specific):
+
+Copyright 2016, Joyent Inc
+Author: Alex Wilson
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF bcrypt-pbkdf NOTICES, INFORMATION, AND LICENSE
+
+%% bl NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+=====================
+
+Copyright (c) 2014 bl contributors
+----------------------------------
+
+*bl contributors listed at *
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF bl NOTICES, INFORMATION, AND LICENSE
+
+%% boom NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Walmart and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/boom/graphs/contributors
+=========================================
+END OF boom NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2013 Julian Gruber
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF brace-expansion NOTICES, INFORMATION, AND LICENSE
+
+%% browser-stdout NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2018 kumavis
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF browser-stdout NOTICES, INFORMATION, AND LICENSE
+
+%% browserify-mime NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2010 Benjamin Thomas, Robert Kieffer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF browserify-mime NOTICES, INFORMATION, AND LICENSE
+
+%% buffer-equal-constant-time NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2013, GoInstant Inc., a salesforce.com company
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+* Neither the name of salesforce.com, nor GoInstant, nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF buffer-equal-constant-time NOTICES, INFORMATION, AND LICENSE
+
+%% camelcase NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF camelcase NOTICES, INFORMATION, AND LICENSE
+
+%% caseless NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+1. Definitions.
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+END OF TERMS AND CONDITIONS
+=========================================
+END OF caseless NOTICES, INFORMATION, AND LICENSE
+
+%% center-align NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF center-align NOTICES, INFORMATION, AND LICENSE
+
+%% chalk NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF chalk NOTICES, INFORMATION, AND LICENSE
+
+%% cliui NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015, Contributors
+
+Permission to use, copy, modify, and/or distribute this software
+for any purpose with or without fee is hereby granted, provided
+that the above copyright notice and this permission notice
+appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
+LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
+OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF cliui NOTICES, INFORMATION, AND LICENSE
+
+%% combined-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2011 Debuggable Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF combined-stream NOTICES, INFORMATION, AND LICENSE
+
+%% commander NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2011 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF commander NOTICES, INFORMATION, AND LICENSE
+
+%% commander NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2011 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF commander NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% concat-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF concat-map NOTICES, INFORMATION, AND LICENSE
+
+%% core-util-is NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Node.js contributors. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF core-util-is NOTICES, INFORMATION, AND LICENSE
+
+%% cryptiles NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2014, Eran Hammer and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hueniverse/cryptiles/graphs/contributors
+=========================================
+END OF cryptiles NOTICES, INFORMATION, AND LICENSE
+
+%% dashdash NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+# This is the MIT license
+
+Copyright (c) 2013 Trent Mick. All rights reserved.
+Copyright (c) 2013 Joyent Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF dashdash NOTICES, INFORMATION, AND LICENSE
+
+%% debug NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2014 TJ Holowaychuk
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+and associated documentation files (the 'Software'), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial
+portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF debug NOTICES, INFORMATION, AND LICENSE
+
+%% decamelize NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF decamelize NOTICES, INFORMATION, AND LICENSE
+
+%% delayed-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2011 Debuggable Limited
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF delayed-stream NOTICES, INFORMATION, AND LICENSE
+
+%% diff NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Software License Agreement (BSD License)
+
+Copyright (c) 2009-2015, Kevin Decker
+
+All rights reserved.
+
+Redistribution and use of this software in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the
+ following disclaimer.
+
+* Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the
+ following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+* Neither the name of Kevin Decker nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior
+ written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF diff NOTICES, INFORMATION, AND LICENSE
+
+%% ecc-jsbn NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Jeremie Miller
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF ecc-jsbn NOTICES, INFORMATION, AND LICENSE
+
+%% ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright 2015 D2L Corporation
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+=========================================
+END OF ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE
+
+%% escape-string-regexp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF escape-string-regexp NOTICES, INFORMATION, AND LICENSE
+
+%% escape-string-regexp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF escape-string-regexp NOTICES, INFORMATION, AND LICENSE
+
+%% extend NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Stefan Thomas
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF extend NOTICES, INFORMATION, AND LICENSE
+
+%% extend NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF extend NOTICES, INFORMATION, AND LICENSE
+
+%% extsprintf NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Joyent, Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE
+=========================================
+END OF extsprintf NOTICES, INFORMATION, AND LICENSE
+
+%% forever-agent NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF forever-agent NOTICES, INFORMATION, AND LICENSE
+
+%% form-data NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+=========================================
+END OF form-data NOTICES, INFORMATION, AND LICENSE
+
+%% fs.realpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+----
+
+This library bundles a version of the `fs.realpath` and `fs.realpathSync`
+methods from Node.js v0.10 under the terms of the Node.js MIT license.
+
+Node's license follows, also included at the header of `old.js` which contains
+the licensed code:
+
+ Copyright Joyent, Inc. and other Node contributors.
+
+ Permission is hereby granted, free of charge, to any person obtaining a
+ copy of this software and associated documentation files (the "Software"),
+ to deal in the Software without restriction, including without limitation
+ the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ and/or sell copies of the Software, and to permit persons to whom the
+ Software is furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF fs.realpath NOTICES, INFORMATION, AND LICENSE
+
+%% generate-function NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF generate-function NOTICES, INFORMATION, AND LICENSE
+
+%% generate-object-property NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF generate-object-property NOTICES, INFORMATION, AND LICENSE
+
+%% getpass NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF getpass NOTICES, INFORMATION, AND LICENSE
+
+%% glob NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF glob NOTICES, INFORMATION, AND LICENSE
+
+%% growl NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF growl NOTICES, INFORMATION, AND LICENSE
+
+%% handlebars NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (C) 2011-2016 by Yehuda Katz
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF handlebars NOTICES, INFORMATION, AND LICENSE
+
+%% har-validator NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015, Ahmad Nassri
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF har-validator NOTICES, INFORMATION, AND LICENSE
+
+%% has-ansi NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF has-ansi NOTICES, INFORMATION, AND LICENSE
+
+%% has-flag NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF has-flag NOTICES, INFORMATION, AND LICENSE
+
+%% hash-base NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Kirill Fomichev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF hash-base NOTICES, INFORMATION, AND LICENSE
+
+%% hawk NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Eran Hammer and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hueniverse/hawk/graphs/contributors
+=========================================
+END OF hawk NOTICES, INFORMATION, AND LICENSE
+
+%% he NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF he NOTICES, INFORMATION, AND LICENSE
+
+%% hoek NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2011-2014, Walmart and other contributors.
+Copyright (c) 2011, Yahoo Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/hapi/graphs/contributors
+Portions of this project were initially based on the Yahoo! Inc. Postmile project,
+published at https://github.com/yahoo/postmile.
+=========================================
+END OF hoek NOTICES, INFORMATION, AND LICENSE
+
+%% http-signature NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF http-signature NOTICES, INFORMATION, AND LICENSE
+
+%% inflight NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF inflight NOTICES, INFORMATION, AND LICENSE
+
+%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF inherits NOTICES, INFORMATION, AND LICENSE
+
+%% inherits NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF inherits NOTICES, INFORMATION, AND LICENSE
+
+%% is-buffer NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Feross Aboukhadijeh
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF is-buffer NOTICES, INFORMATION, AND LICENSE
+
+%% is-my-ip-valid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF is-my-ip-valid NOTICES, INFORMATION, AND LICENSE
+
+%% is-my-json-valid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Mathias Buus
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF is-my-json-valid NOTICES, INFORMATION, AND LICENSE
+
+%% is-property NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2013 Mikola Lysenko
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF is-property NOTICES, INFORMATION, AND LICENSE
+
+%% is-typedarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF is-typedarray NOTICES, INFORMATION, AND LICENSE
+
+%% isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF isarray NOTICES, INFORMATION, AND LICENSE
+
+%% isemail NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright © 2008-2011, Dominic Sayers
+Copyright © 2013-2014, GlobeSherpa
+Copyright © 2014-2015, Eli Skeggs
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+- Neither the name of Dominic Sayers nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF isemail NOTICES, INFORMATION, AND LICENSE
+
+%% isstream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+=====================
+
+Copyright (c) 2015 Rod Vagg
+---------------------------
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF isstream NOTICES, INFORMATION, AND LICENSE
+
+%% joi NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Walmart and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/joi/graphs/contributors
+=========================================
+END OF joi NOTICES, INFORMATION, AND LICENSE
+
+%% jsbn NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Licensing
+---------
+
+This software is covered under the following copyright:
+
+/*
+ * Copyright (c) 2003-2005 Tom Wu
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
+ * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
+ * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
+ * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
+ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * In addition, the following condition applies:
+ *
+ * All redistributions must retain an intact copy of this copyright notice
+ * and disclaimer.
+ */
+
+Address all questions regarding this license to:
+
+ Tom Wu
+ tjw@cs.Stanford.EDU
+=========================================
+END OF jsbn NOTICES, INFORMATION, AND LICENSE
+
+%% json-edm-parser NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Yang Xia
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF json-edm-parser NOTICES, INFORMATION, AND LICENSE
+
+%% json-schema NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF json-schema NOTICES, INFORMATION, AND LICENSE
+
+%% json-stringify-safe NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF json-stringify-safe NOTICES, INFORMATION, AND LICENSE
+
+%% jsonparse NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License
+
+Copyright (c) 2012 Tim Caswell
+
+Permission is hereby granted, free of charge,
+to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to
+deal in the Software without restriction, including
+without limitation the rights to use, copy, modify,
+merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom
+the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
+ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF jsonparse NOTICES, INFORMATION, AND LICENSE
+
+%% jsonpointer NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2011-2015 Jan Lehnardt & Marc Bachmann
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF jsonpointer NOTICES, INFORMATION, AND LICENSE
+
+%% jsonwebtoken NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015 Auth0, Inc. (http://auth0.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF jsonwebtoken NOTICES, INFORMATION, AND LICENSE
+
+%% jsprim NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Joyent, Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE
+=========================================
+END OF jsprim NOTICES, INFORMATION, AND LICENSE
+
+%% jwa NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2013 Brian J. Brennan
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF jwa NOTICES, INFORMATION, AND LICENSE
+
+%% jws NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2013 Brian J. Brennan
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
+Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
+PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
+FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF jws NOTICES, INFORMATION, AND LICENSE
+
+%% kind-of NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, Jon Schlinkert
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF kind-of NOTICES, INFORMATION, AND LICENSE
+
+%% lazy-cache NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF lazy-cache NOTICES, INFORMATION, AND LICENSE
+
+%% lodash NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright JS Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
+=========================================
+END OF lodash NOTICES, INFORMATION, AND LICENSE
+
+%% lodash.once NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright jQuery Foundation and other contributors
+
+Based on Underscore.js, copyright Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/lodash/lodash
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+Copyright and related rights for sample code are waived via CC0. Sample
+code is defined as all source code displayed within the prose of the
+documentation.
+
+CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+====
+
+Files located in the node_modules and vendor directories are externally
+maintained libraries used by this software which have their own
+licenses; we recommend you read them, as their terms may differ from the
+terms above.
+=========================================
+END OF lodash.once NOTICES, INFORMATION, AND LICENSE
+
+%% longest NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014-2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF longest NOTICES, INFORMATION, AND LICENSE
+
+%% md5.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Kirill Fomichev
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF md5.js NOTICES, INFORMATION, AND LICENSE
+
+%% mime-db NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014 Jonathan Ong me@jongleberry.com
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF mime-db NOTICES, INFORMATION, AND LICENSE
+
+%% mime-types NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2014 Jonathan Ong
+Copyright (c) 2015 Douglas Christopher Wilson
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mime-types NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% minimatch NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF minimatch NOTICES, INFORMATION, AND LICENSE
+
+%% minimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF minimist NOTICES, INFORMATION, AND LICENSE
+
+%% minimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF minimist NOTICES, INFORMATION, AND LICENSE
+
+%% mkdirp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF mkdirp NOTICES, INFORMATION, AND LICENSE
+
+%% mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2011-2018 JS Foundation and contributors, https://js.foundation
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+'Software'), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mocha NOTICES, INFORMATION, AND LICENSE
+
+%% mockery NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyrights for code authored by Yahoo! Inc. is licensed under the following
+ terms:
+
+ MIT License
+
+ Copyright (c) 2011 Yahoo! Inc. All Rights Reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to
+ deal in the Software without restriction, including without limitation the
+ rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+=========================================
+END OF mockery NOTICES, INFORMATION, AND LICENSE
+
+%% moment NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) JS Foundation and other contributors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF moment NOTICES, INFORMATION, AND LICENSE
+
+%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Zeit, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF ms NOTICES, INFORMATION, AND LICENSE
+
+%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2016 Zeit, Inc.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF ms NOTICES, INFORMATION, AND LICENSE
+
+%% node-uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2012 Robert Kieffer
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF node-uuid NOTICES, INFORMATION, AND LICENSE
+
+%% oauth-sign NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF oauth-sign NOTICES, INFORMATION, AND LICENSE
+
+%% once NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF once NOTICES, INFORMATION, AND LICENSE
+
+%% optimist NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF optimist NOTICES, INFORMATION, AND LICENSE
+
+%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF path-is-absolute NOTICES, INFORMATION, AND LICENSE
+
+%% pinkie NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF pinkie NOTICES, INFORMATION, AND LICENSE
+
+%% pinkie-promise NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF pinkie-promise NOTICES, INFORMATION, AND LICENSE
+
+%% process-nextick-args NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+# Copyright (c) 2015 Calvin Metcalf
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.**
+=========================================
+END OF process-nextick-args NOTICES, INFORMATION, AND LICENSE
+
+%% punycode NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF punycode NOTICES, INFORMATION, AND LICENSE
+
+%% q NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2009–2014 Kristopher Michael Kowal. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF q NOTICES, INFORMATION, AND LICENSE
+
+%% qs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2014 Nathan LaFreniere and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors
+=========================================
+END OF qs NOTICES, INFORMATION, AND LICENSE
+
+%% readable-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF readable-stream NOTICES, INFORMATION, AND LICENSE
+
+%% repeat-string NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2014-2016, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF repeat-string NOTICES, INFORMATION, AND LICENSE
+
+%% request NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF request NOTICES, INFORMATION, AND LICENSE
+
+%% right-align NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2015, Jon Schlinkert.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF right-align NOTICES, INFORMATION, AND LICENSE
+
+%% safe-buffer NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Feross Aboukhadijeh
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF safe-buffer NOTICES, INFORMATION, AND LICENSE
+
+%% safer-buffer NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) 2018 Nikita Skovoroda
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF safer-buffer NOTICES, INFORMATION, AND LICENSE
+
+%% sax NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) Isaac Z. Schlueter ("Author")
+All rights reserved.
+
+The BSD License
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+The file "examples/strict.dtd" is licensed by the W3C and used according
+to the terms of the W3C SOFTWARE NOTICE AND LICENSE. See LICENSE-W3C.html
+for details.
+=========================================
+END OF sax NOTICES, INFORMATION, AND LICENSE
+
+%% semver NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF semver NOTICES, INFORMATION, AND LICENSE
+
+%% semver-compare NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF semver-compare NOTICES, INFORMATION, AND LICENSE
+
+%% shelljs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012, Artur Adib
+All rights reserved.
+
+You may use this project under the terms of the New BSD license as follows:
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Artur Adib nor the
+ names of the contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL ARTUR ADIB BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF shelljs NOTICES, INFORMATION, AND LICENSE
+
+%% sntp NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Eran Hammer and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hueniverse/sntp/graphs/contributors
+=========================================
+END OF sntp NOTICES, INFORMATION, AND LICENSE
+
+%% source-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF source-map NOTICES, INFORMATION, AND LICENSE
+
+%% source-map NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2011, Mozilla Foundation and contributors
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+* Neither the names of the Mozilla Foundation nor the names of project
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+=========================================
+END OF source-map NOTICES, INFORMATION, AND LICENSE
+
+%% sshpk NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. All rights reserved.
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF sshpk NOTICES, INFORMATION, AND LICENSE
+
+%% string_decoder NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright Joyent, Inc. and other Node contributors.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to permit
+persons to whom the Software is furnished to do so, subject to the
+following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
+USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF string_decoder NOTICES, INFORMATION, AND LICENSE
+
+%% stringstream NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012 Michael Hart (michael.hart.au@gmail.com)
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF stringstream NOTICES, INFORMATION, AND LICENSE
+
+%% strip-ansi NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF strip-ansi NOTICES, INFORMATION, AND LICENSE
+
+%% supports-color NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF supports-color NOTICES, INFORMATION, AND LICENSE
+
+%% supports-color NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF supports-color NOTICES, INFORMATION, AND LICENSE
+
+%% topo NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2012-2014, Walmart and other contributors.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * The names of any contributors may not be used to endorse or promote
+ products derived from this software without specific prior written
+ permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ * * *
+
+The complete list of contributors can be found at: https://github.com/hapijs/topo/graphs/contributors
+=========================================
+END OF topo NOTICES, INFORMATION, AND LICENSE
+
+%% tough-cookie NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015, Salesforce.com, Inc.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===
+
+The following exceptions apply:
+
+===
+
+`public_suffix_list.dat` was obtained from
+ via
+. The license for this file is MPL/2.0. The header of
+that file reads as follows:
+
+ // This Source Code Form is subject to the terms of the Mozilla Public
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
+ // file, You can obtain one at http://mozilla.org/MPL/2.0/.
+=========================================
+END OF tough-cookie NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2012 Koichi Kobayashi
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF tunnel NOTICES, INFORMATION, AND LICENSE
+
+%% tunnel-agent NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Apache License
+
+Version 2.0, January 2004
+
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+=========================================
+END OF tunnel-agent NOTICES, INFORMATION, AND LICENSE
+
+%% tweetnacl NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to
+=========================================
+END OF tweetnacl NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Typed Rest Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% typed-rest-client NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Typed Rest Client for Node.js
+
+Copyright (c) Microsoft Corporation
+
+All rights reserved.
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the "Software"), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
+LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
+NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF typed-rest-client NOTICES, INFORMATION, AND LICENSE
+
+%% uglify-js NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+UglifyJS is released under the BSD license:
+
+Copyright 2012-2013 (c) Mihai Bazon
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+
+ * Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.
+
+ * Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
+EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+=========================================
+END OF uglify-js NOTICES, INFORMATION, AND LICENSE
+
+%% uglify-to-browserify NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2013 Forbes Lindesay
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF uglify-to-browserify NOTICES, INFORMATION, AND LICENSE
+
+%% underscore NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative
+Reporters & Editors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF underscore NOTICES, INFORMATION, AND LICENSE
+
+%% util-deprecate NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+(The MIT License)
+
+Copyright (c) 2014 Nathan Rajlich
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF util-deprecate NOTICES, INFORMATION, AND LICENSE
+
+%% uuid NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) 2010-2016 Robert Kieffer and other contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF uuid NOTICES, INFORMATION, AND LICENSE
+
+%% validator NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2015 Chris O'Hara
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF validator NOTICES, INFORMATION, AND LICENSE
+
+%% verror NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright (c) 2016, Joyent, Inc. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE
+=========================================
+END OF verror NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The MIT License (MIT)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+=========================================
+END OF vsts-task-lib NOTICES, INFORMATION, AND LICENSE
+
+%% vsts-task-tool-lib NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+MIT License
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all
+ copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ SOFTWARE
+=========================================
+END OF vsts-task-tool-lib NOTICES, INFORMATION, AND LICENSE
+
+%% window-size NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF window-size NOTICES, INFORMATION, AND LICENSE
+
+%% wordwrap NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF wordwrap NOTICES, INFORMATION, AND LICENSE
+
+%% wordwrap NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+=========================================
+END OF wordwrap NOTICES, INFORMATION, AND LICENSE
+
+%% wrappy NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+The ISC License
+
+Copyright (c) Isaac Z. Schlueter and Contributors
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
+IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+=========================================
+END OF wrappy NOTICES, INFORMATION, AND LICENSE
+
+%% xml2js NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010, 2011, 2012, 2013. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to
+deal in the Software without restriction, including without limitation the
+rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+sell copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+IN THE SOFTWARE.
+=========================================
+END OF xml2js NOTICES, INFORMATION, AND LICENSE
+
+%% xmlbuilder NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF xmlbuilder NOTICES, INFORMATION, AND LICENSE
+
+%% xtend NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+NO LICENSE FOUND
+=========================================
+END OF xtend NOTICES, INFORMATION, AND LICENSE
+
+%% yargs NOTICES, INFORMATION, AND LICENSE BEGIN HERE
+=========================================
+Copyright 2010 James Halliday (mail@substack.net)
+
+This project is free software released under the MIT/X11 license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+=========================================
+END OF yargs NOTICES, INFORMATION, AND LICENSE
+
diff --git a/_generated/JavaToolInstallerV0_Node20/icon.png b/_generated/JavaToolInstallerV0_Node20/icon.png
new file mode 100644
index 000000000000..57f4307da42a
Binary files /dev/null and b/_generated/JavaToolInstallerV0_Node20/icon.png differ
diff --git a/_generated/JavaToolInstallerV0_Node20/icon.svg b/_generated/JavaToolInstallerV0_Node20/icon.svg
new file mode 100644
index 000000000000..31c7eb322d6c
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/icon.svg
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_generated/JavaToolInstallerV0_Node20/javatoolinstaller.ts b/_generated/JavaToolInstallerV0_Node20/javatoolinstaller.ts
new file mode 100644
index 000000000000..7667cd3266a8
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/javatoolinstaller.ts
@@ -0,0 +1,263 @@
+import fs = require('fs');
+import os = require('os');
+import path = require('path');
+import taskLib = require('azure-pipelines-task-lib/task');
+import toolLib = require('azure-pipelines-tool-lib/tool');
+import * as telemetry from 'azure-pipelines-tasks-utility-common/telemetry';
+
+import { AzureStorageArtifactDownloader } from './AzureStorageArtifacts/AzureStorageArtifactDownloader';
+import { JavaFilesExtractor, BIN_FOLDER } from './FileExtractor/JavaFilesExtractor';
+import taskutils = require('./taskutils');
+
+const VOLUMES_FOLDER: string = '/Volumes';
+const JDK_FOLDER: string = '/Library/Java/JavaVirtualMachines';
+const JDK_HOME_FOLDER: string = 'Contents/Home';
+taskLib.setResourcePath(path.join(__dirname, 'task.json'));
+
+async function run(): Promise {
+ try {
+ const versionSpec = taskLib.getInput('versionSpec', true);
+ const jdkArchitectureOption = taskLib.getInput('jdkArchitectureOption', true);
+ await getJava(versionSpec, jdkArchitectureOption);
+ taskLib.setResult(taskLib.TaskResult.Succeeded, taskLib.loc('SucceedMsg'));
+ telemetry.emitTelemetry('TaskHub', 'JavaToolInstallerV0', { versionSpec, jdkArchitectureOption });
+ } catch (error) {
+ taskLib.error(error.message);
+ taskLib.setResult(taskLib.TaskResult.Failed, error.message);
+ }
+}
+
+async function getJava(versionSpec: string, jdkArchitectureOption: string): Promise {
+ const preInstalled: boolean = ('PreInstalled' === taskLib.getInput('jdkSourceOption', true));
+ const fromAzure: boolean = ('AzureStorage' == taskLib.getInput('jdkSourceOption', true));
+ const extractLocation: string = taskLib.getPathInput('jdkDestinationDirectory', true);
+ const cleanDestinationDirectory: boolean = taskLib.getBoolInput('cleanDestinationDirectory', false);
+ let compressedFileExtension: string;
+ let jdkDirectory: string;
+ const extendedJavaHome: string = `JAVA_HOME_${versionSpec}_${jdkArchitectureOption}`.toUpperCase();
+
+ toolLib.debug('Trying to get tool from local cache first');
+ const localVersions: string[] = toolLib.findLocalToolVersions('Java');
+ const version: string = toolLib.evaluateVersions(localVersions, versionSpec);
+
+ if (version) { //This version of Java JDK is already in the cache. Use it instead of downloading again.
+ console.log(taskLib.loc('Info_ResolvedToolFromCache', version));
+ } else if (preInstalled) {
+ const preInstalledJavaDirectory: string | undefined = taskLib.getVariable(extendedJavaHome);
+ if (!preInstalledJavaDirectory) {
+ throw new Error(taskLib.loc('JavaNotPreinstalled', versionSpec));
+ }
+ console.log(taskLib.loc('UsePreinstalledJava', preInstalledJavaDirectory));
+ jdkDirectory = JavaFilesExtractor.setJavaHome(preInstalledJavaDirectory, false);
+ } else {
+ if (cleanDestinationDirectory) {
+ cleanFolder(extractLocation);
+ }
+ let jdkFileName: string;
+ if (fromAzure) {
+ // download from azure and save to temporary directory
+ console.log(taskLib.loc('RetrievingJdkFromAzure'));
+ const fileNameAndPath: string = taskLib.getInput('azureCommonVirtualFile', true);
+ const azureDownloader = new AzureStorageArtifactDownloader(
+ taskLib.getInput('azureResourceManagerEndpoint', true),
+ taskLib.getInput('azureStorageAccountName', true),
+ taskLib.getInput('azureContainerName', true),
+ "",
+ taskLib.getInput('azureResourceGroupName', false),
+ );
+ await azureDownloader.downloadArtifacts(extractLocation, '*' + fileNameAndPath);
+ await taskutils.sleepFor(250); //Wait for the file to be released before extracting it.
+ let jdkArchiveName = path.basename(fileNameAndPath);
+ jdkFileName = path.join(extractLocation, jdkArchiveName);
+ toolLib.debug(`jdkFileName: ${jdkFileName}`);
+ } else {
+ // get from local directory
+ console.log(taskLib.loc('RetrievingJdkFromLocalPath'));
+ jdkFileName = taskLib.getInput('jdkFile', true);
+ }
+ compressedFileExtension = JavaFilesExtractor.getSupportedFileEnding(jdkFileName);
+ jdkDirectory = await installJDK(jdkFileName, compressedFileExtension, extractLocation, extendedJavaHome, versionSpec, cleanDestinationDirectory);
+ }
+ console.log(taskLib.loc('SetExtendedJavaHome', extendedJavaHome, jdkDirectory));
+ taskLib.setVariable(extendedJavaHome, jdkDirectory);
+ toolLib.prependPath(path.join(jdkDirectory, BIN_FOLDER));
+}
+
+/**
+ * Delete the contents of the destination directory but leave the directory in place
+ * @param directory Directory path
+ * @returns true if the deletion was successful, false - otherwise
+ */
+function cleanFolder(directory: string): boolean {
+ // Clean the destination folder before downloading and extracting
+ if (taskLib.exist(directory) && taskLib.stats(directory).isDirectory) {
+ console.log(taskLib.loc('CleanDestDir', directory));
+ try {
+ fs.readdirSync(directory)
+ .forEach((item: string) => {
+ const itemPath = path.join(directory, item);
+ taskLib.rmRF(itemPath);
+ });
+ return true;
+ } catch (err) {
+ console.log(taskLib.loc('ErrorCleaningFolder', directory));
+ return false;
+ }
+ }
+}
+
+/**
+ * Install JDK.
+ * @param sourceFile Path to JDK file.
+ * @param fileExtension JDK file extension.
+ * @param archiveExtractLocation Path to folder to extract a JDK.
+ * @returns string
+ */
+async function installJDK(sourceFile: string, fileExtension: string, archiveExtractLocation: string, extendedJavaHome: string, versionSpec: string, cleanDestinationDirectory: boolean): Promise {
+ let jdkDirectory: string;
+ if (fileExtension === '.dmg' && os.platform() === 'darwin') {
+ // Using set because 'includes' array method requires tsconfig option "lib": ["ES2017"]
+ const volumes: Set = new Set(fs.readdirSync(VOLUMES_FOLDER));
+
+ await taskutils.attach(sourceFile);
+
+ const volumePath: string = getVolumePath(volumes);
+
+ const pkgPath: string = getPackagePath(volumePath);
+ try {
+ jdkDirectory = await installPkg(pkgPath, extendedJavaHome, versionSpec);
+ } finally {
+ // In case of an error, there is still a need to detach the disk image
+ await taskutils.detach(volumePath);
+ }
+ }
+ else if (fileExtension === '.pkg' && os.platform() === 'darwin') {
+ jdkDirectory = await installPkg(sourceFile, extendedJavaHome, versionSpec);
+ }
+ else {
+ const createExtractDirectory: boolean = taskLib.getBoolInput('createExtractDirectory', false);
+ let extractionDirectory: string = "";
+ if (createExtractDirectory) {
+ const extractDirectoryName: string = `${extendedJavaHome}_${JavaFilesExtractor.getStrippedName(sourceFile)}_${fileExtension.substr(1)}`;
+ extractionDirectory = path.join(archiveExtractLocation, extractDirectoryName);
+ } else {
+ // we need to remove path separator symbol on the end of archiveExtractLocation path since it could produce issues in getJavaHomeFromStructure method
+ if (archiveExtractLocation.endsWith(path.sep)) {
+ archiveExtractLocation = archiveExtractLocation.slice(0, -1);
+ }
+
+ extractionDirectory = path.normalize(archiveExtractLocation);
+ }
+ // unpack the archive, set `JAVA_HOME` and save it for further processing
+ await unpackArchive(extractionDirectory, sourceFile, fileExtension, cleanDestinationDirectory);
+ jdkDirectory = JavaFilesExtractor.setJavaHome(extractionDirectory);
+ }
+ return jdkDirectory;
+}
+
+/**
+ * Unpack an archive.
+ * @param unpackDir Directory path to unpack files.
+ * @param jdkFileName JDK file name.
+ * @param fileExt JDK file ending.
+ * @param cleanDestinationDirectory Option to clean the destination directory before the JDK is extracted into it.
+ * @returns Promise
+ */
+async function unpackArchive(unpackDir: string, jdkFileName: string, fileExt: string, cleanDestinationDirectory: boolean): Promise {
+ const javaFilesExtractor = new JavaFilesExtractor();
+ if (!cleanDestinationDirectory && taskLib.exist(unpackDir)) {
+ // do nothing since the files were extracted and ready for using
+ console.log(taskLib.loc('ArchiveWasExtractedEarlier'));
+ } else {
+ // unpack files to specified directory
+ console.log(taskLib.loc('ExtractingArchiveToPath', unpackDir));
+ await javaFilesExtractor.unzipJavaDownload(jdkFileName, fileExt, unpackDir);
+ }
+}
+
+/**
+ * Get the path to a folder inside the VOLUMES_FOLDER.
+ * Only for macOS.
+ * @param volumes VOLUMES_FOLDER contents before attaching a disk image.
+ * @returns string
+ */
+function getVolumePath(volumes: Set): string {
+ const newVolumes: string[] = fs.readdirSync(VOLUMES_FOLDER).filter(volume => !volumes.has(volume));
+
+ if (newVolumes.length !== 1) {
+ throw new Error(taskLib.loc('UnsupportedDMGStructure'));
+ }
+ return path.join(VOLUMES_FOLDER, newVolumes[0]);
+}
+
+/**
+ * Get path to a .pkg file.
+ * Only for macOS.
+ * @param volumePath Path to the folder containing a .pkg file.
+ * @returns string
+ */
+function getPackagePath(volumePath: string): string {
+ const packages: string[] = fs.readdirSync(volumePath).filter(file => file.endsWith('.pkg'));
+
+ if (packages.length === 1) {
+ return path.join(volumePath, packages[0]);
+ } else if (packages.length === 0) {
+ throw new Error(taskLib.loc('NoPKGFile'));
+ } else {
+ throw new Error(taskLib.loc('SeveralPKGFiles'));
+ }
+}
+
+/**
+ * Install a .pkg file.
+ * @param pkgPath Path to a .pkg file.
+ * @param extendedJavaHome Extended JAVA_HOME.
+ * @param versionSpec Version of JDK to install.
+ * @returns Promise
+ */
+async function installPkg(pkgPath: string, extendedJavaHome: string, versionSpec: string): Promise {
+ if (!fs.existsSync(pkgPath)) {
+ throw new Error('PkgPathDoesNotExist');
+ }
+
+ console.log(taskLib.loc('InstallJDK'));
+
+ // Using set because 'includes' array method requires tsconfig option "lib": ["ES2017"]
+ const JDKs: Set = new Set(fs.readdirSync(JDK_FOLDER));
+
+ await runPkgInstaller(pkgPath);
+
+ const newJDKs: string[] = fs.readdirSync(JDK_FOLDER).filter(jdkName => !JDKs.has(jdkName));
+
+ let jdkDirectory: string;
+
+ if (newJDKs.length === 0) {
+ const preInstalledJavaDirectory: string | undefined = taskLib.getVariable(extendedJavaHome);
+ if (!preInstalledJavaDirectory) {
+ throw new Error(taskLib.loc('JavaNotPreinstalled', versionSpec));
+ }
+ console.log(taskLib.loc('PreInstalledJavaUpgraded'));
+ console.log(taskLib.loc('UsePreinstalledJava', preInstalledJavaDirectory));
+ jdkDirectory = preInstalledJavaDirectory;
+ } else {
+ console.log(taskLib.loc('JavaSuccessfullyInstalled'));
+ jdkDirectory = path.join(JDK_FOLDER, newJDKs[0], JDK_HOME_FOLDER);
+ }
+
+ return jdkDirectory;
+}
+
+/**
+ * Install a .pkg file.
+ * Only for macOS.
+ * Returns promise with return code.
+ * @param pkgPath Path to a .pkg file.
+ * @returns number
+ */
+async function runPkgInstaller(pkgPath: string): Promise {
+ const installer = taskutils.sudo('installer');
+ installer.line(`-package "${pkgPath}" -target /`);
+ return installer.exec();
+}
+
+run();
diff --git a/_generated/JavaToolInstallerV0_Node20/make.json b/_generated/JavaToolInstallerV0_Node20/make.json
new file mode 100644
index 000000000000..556b28ffb53f
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/make.json
@@ -0,0 +1,23 @@
+{
+ "externals": {
+ "archivePackages": [
+ {
+ "url": "https://vstsagenttools.blob.core.windows.net/tools/7zip/1/7zip.zip",
+ "dest": "./FileExtractor/"
+ }
+ ]
+ },
+ "rm": [
+ {
+ "items": [
+ "node_modules/azure-pipelines-tasks-utility-common/node_modules/azure-pipelines-task-lib",
+ "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-pipelines-task-lib",
+ "node_modules/azp-tasks-az-blobstorage-provider/node_modules/azure-pipelines-task-lib",
+ "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/vsts-task-lib",
+ "node_modules/azure-pipelines-tool-lib/node_modules/azure-pipelines-task-lib",
+ "node_modules/artifact-engine/node_modules/azure-pipelines-task-lib"
+ ],
+ "options": "-Rf"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/package-lock.json b/_generated/JavaToolInstallerV0_Node20/package-lock.json
new file mode 100644
index 000000000000..4aac9f127540
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/package-lock.json
@@ -0,0 +1,3771 @@
+{
+ "name": "java-tool-installer",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@azure/msal-common": {
+ "version": "9.1.1",
+ "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-9.1.1.tgz",
+ "integrity": "sha512-we9xR8lvu47fF0h+J8KyXoRy9+G/fPzm3QEa2TrdR3jaVS3LKAyE2qyMuUkNdbVkvzl8Zr9f7l+IUSP22HeqXw=="
+ },
+ "@azure/msal-node": {
+ "version": "1.14.5",
+ "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.14.5.tgz",
+ "integrity": "sha512-NcVdMfn8Z3ogN+9RjOSF7uwf2Gki5DEJl0BdDSL83KUAgVAobtkZi5W8EqxbJLrTO/ET0jv5DregrcR5qg2pEA==",
+ "requires": {
+ "@azure/msal-common": "^9.0.1",
+ "jsonwebtoken": "^8.5.1",
+ "uuid": "^8.3.0"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
+ }
+ }
+ },
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/jsonwebtoken": {
+ "version": "8.5.9",
+ "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz",
+ "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "20.5.7",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz",
+ "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA=="
+ },
+ "@types/q": {
+ "version": "1.5.6",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz",
+ "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ=="
+ },
+ "@types/uuid": {
+ "version": "3.4.11",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.11.tgz",
+ "integrity": "sha512-CJNkbEu4IdVuBMRVaNC2GjASgJK7ziqDlVXWuJ1pvhOLADl7nzxhTKjHRdOmo2SuXuygcWBmzgYgn9foTX0UiA=="
+ },
+ "agent-base": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
+ "requires": {
+ "debug": "4"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "artifact-engine": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/artifact-engine/-/artifact-engine-1.2.0.tgz",
+ "integrity": "sha512-EsLKSNIeZfTks57ek0lR3iJA49hrX4Ju2Qb6CaEzK5uSXX0OXR/iD3Mqstit31UPvXhmG7qcnTFBz4lMswIxIg==",
+ "requires": {
+ "azure-pipelines-task-lib": "^3.4.0",
+ "handlebars": "4.7.7",
+ "minimatch": "^3.0.5",
+ "tunnel": "0.0.4"
+ },
+ "dependencies": {
+ "@ampproject/remapping": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz",
+ "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==",
+ "requires": {
+ "@jridgewell/gen-mapping": "^0.1.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "@babel/code-frame": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+ "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "requires": {
+ "@babel/highlight": "^7.16.7"
+ }
+ },
+ "@babel/compat-data": {
+ "version": "7.17.10",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz",
+ "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw=="
+ },
+ "@babel/core": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz",
+ "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==",
+ "requires": {
+ "@ampproject/remapping": "^2.1.0",
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.18.2",
+ "@babel/helper-compilation-targets": "^7.18.2",
+ "@babel/helper-module-transforms": "^7.18.0",
+ "@babel/helpers": "^7.18.2",
+ "@babel/parser": "^7.18.0",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.2",
+ "@babel/types": "^7.18.2",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.2",
+ "json5": "^2.2.1",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz",
+ "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==",
+ "requires": {
+ "@babel/types": "^7.18.2",
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "jsesc": "^2.5.1"
+ },
+ "dependencies": {
+ "@jridgewell/gen-mapping": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz",
+ "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ }
+ }
+ },
+ "@babel/helper-compilation-targets": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz",
+ "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==",
+ "requires": {
+ "@babel/compat-data": "^7.17.10",
+ "@babel/helper-validator-option": "^7.16.7",
+ "browserslist": "^4.20.2",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "@babel/helper-environment-visitor": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz",
+ "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ=="
+ },
+ "@babel/helper-function-name": {
+ "version": "7.17.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
+ "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/types": "^7.17.0"
+ }
+ },
+ "@babel/helper-hoist-variables": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
+ "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
+ "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz",
+ "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==",
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.16.7",
+ "@babel/helper-module-imports": "^7.16.7",
+ "@babel/helper-simple-access": "^7.17.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.0",
+ "@babel/types": "^7.18.0"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz",
+ "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==",
+ "requires": {
+ "@babel/types": "^7.18.2"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
+ "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+ "requires": {
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+ "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="
+ },
+ "@babel/helper-validator-option": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
+ "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ=="
+ },
+ "@babel/helpers": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz",
+ "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==",
+ "requires": {
+ "@babel/template": "^7.16.7",
+ "@babel/traverse": "^7.18.2",
+ "@babel/types": "^7.18.2"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.17.12",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz",
+ "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.0.tgz",
+ "integrity": "sha512-AqDccGC+m5O/iUStSJy3DGRIUFu7WbY/CppZYwrEUB4N0tZlnI8CSTsgL7v5fHVFmUbRv2sd+yy27o8Ydt4MGg=="
+ },
+ "@babel/template": {
+ "version": "7.16.7",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
+ "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/parser": "^7.16.7",
+ "@babel/types": "^7.16.7"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz",
+ "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==",
+ "requires": {
+ "@babel/code-frame": "^7.16.7",
+ "@babel/generator": "^7.18.2",
+ "@babel/helper-environment-visitor": "^7.18.2",
+ "@babel/helper-function-name": "^7.17.9",
+ "@babel/helper-hoist-variables": "^7.16.7",
+ "@babel/helper-split-export-declaration": "^7.16.7",
+ "@babel/parser": "^7.18.0",
+ "@babel/types": "^7.18.2",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.2.tgz",
+ "integrity": "sha512-0On6B8A4/+mFUto5WERt3EEuG1NznDirvwca1O8UwXQHVY8g3R7OzYgxXdOfMwLO08UrpUD/2+3Bclyq+/C94Q==",
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.16.7",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ }
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
+ "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="
+ },
+ "@jridgewell/gen-mapping": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz",
+ "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==",
+ "requires": {
+ "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@jridgewell/resolve-uri": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz",
+ "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA=="
+ },
+ "@jridgewell/set-array": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz",
+ "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ=="
+ },
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.4.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz",
+ "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w=="
+ },
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.13",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz",
+ "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==",
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
+ "@sinonjs/commons": {
+ "version": "1.8.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
+ "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==",
+ "requires": {
+ "type-detect": "4.0.8"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
+ }
+ }
+ },
+ "@sinonjs/samsam": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz",
+ "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==",
+ "requires": {
+ "@sinonjs/commons": "^1.3.0",
+ "array-from": "^2.1.1",
+ "lodash": "^4.17.15"
+ }
+ },
+ "@sinonjs/text-encoding": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
+ "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ=="
+ },
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/minimatch": {
+ "version": "2.0.29",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-2.0.29.tgz",
+ "integrity": "sha1-UALhT3Xi1x5WQoHfBDHIwbSio2o="
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/mockery": {
+ "version": "1.4.29",
+ "resolved": "https://registry.npmjs.org/@types/mockery/-/mockery-1.4.29.tgz",
+ "integrity": "sha1-m6It838H43gP/4Ux0aOOYz+UV6U="
+ },
+ "@types/node": {
+ "version": "10.17.51",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.51.tgz",
+ "integrity": "sha512-KANw+MkL626tq90l++hGelbl67irOJzGhUJk6a1Bt8QHOeh9tztJx+L0AqttraWKinmZn7Qi5lJZJzx45Gq0dg=="
+ },
+ "@types/qs": {
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz",
+ "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw=="
+ },
+ "@types/xml2js": {
+ "version": "0.4.8",
+ "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.8.tgz",
+ "integrity": "sha512-EyvT83ezOdec7BhDaEcsklWy7RSIdi6CNe95tmOAK0yx/Lm30C9K75snT3fYayK59ApC2oyW+rcHErdG05FHJA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@ungap/promise-all-settled": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
+ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q=="
+ },
+ "aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA=="
+ },
+ "ansi-regex": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
+ },
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
+ "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "append-transform": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
+ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
+ "requires": {
+ "default-require-extensions": "^3.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw=="
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-from": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz",
+ "integrity": "sha512-GQTc6Uupx1FCavi5mPzBvVT7nEOeWMmUA9P95wpfpW1XwMSKs+KaymD5C2Up7KAUKg/mYwbsUYzdZWcoajlNZg=="
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "assert": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz",
+ "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=",
+ "requires": {
+ "util": "0.10.3"
+ }
+ },
+ "assertion-error": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
+ "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw=="
+ },
+ "async": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz",
+ "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g=="
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+ },
+ "binary-extensions": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
+ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
+ },
+ "brace-expansion": {
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
+ "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw=="
+ },
+ "browserslist": {
+ "version": "4.20.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
+ "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+ "requires": {
+ "caniuse-lite": "^1.0.30001332",
+ "electron-to-chromium": "^1.4.118",
+ "escalade": "^3.1.1",
+ "node-releases": "^2.0.3",
+ "picocolors": "^1.0.0"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "caching-transform": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
+ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
+ "requires": {
+ "hasha": "^5.0.0",
+ "make-dir": "^3.0.0",
+ "package-hash": "^4.0.0",
+ "write-file-atomic": "^3.0.0"
+ }
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
+ },
+ "caniuse-lite": {
+ "version": "1.0.30001342",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001342.tgz",
+ "integrity": "sha512-bn6sOCu7L7jcbBbyNhLg0qzXdJ/PMbybZTH/BA6Roet9wxYRm6Tr9D0s0uhLkOZ6MSG+QU6txUgdpr3MXIVqjA=="
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "requires": {
+ "assertion-error": "^1.0.1",
+ "deep-eql": "^0.1.3",
+ "type-detect": "^1.0.0"
+ }
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ }
+ }
+ },
+ "chokidar": {
+ "version": "3.5.3",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
+ "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "requires": {
+ "anymatch": "~3.1.2",
+ "braces": "~3.0.2",
+ "fsevents": "~2.3.2",
+ "glob-parent": "~5.1.2",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.6.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A=="
+ },
+ "cliui": {
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
+ "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^7.0.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
+ },
+ "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"
+ }
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs="
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ }
+ }
+ },
+ "convert-source-map": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
+ "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "deep-eql": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz",
+ "integrity": "sha1-71WKyrjeJSBs1xOQbXTlaTDrafI=",
+ "requires": {
+ "type-detect": "0.1.1"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz",
+ "integrity": "sha1-C6XsKohWQORw6k6FBZcZANrFiCI="
+ }
+ }
+ },
+ "deep-equal": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
+ "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU="
+ },
+ "default-require-extensions": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
+ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
+ "requires": {
+ "strip-bom": "^4.0.0"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "diff": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
+ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w=="
+ },
+ "electron-to-chromium": {
+ "version": "1.4.138",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.138.tgz",
+ "integrity": "sha512-IOyp2Seq3w4QLln+yZWcMF3VXhhduz4bwg9gfI+CnP5TkzwNXQ8FCZuwwPsnes73AfWdf5J2n2OXdUwDUspDPQ=="
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg=="
+ },
+ "escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw=="
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz",
+ "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==",
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
+ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
+ },
+ "foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "formatio": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
+ "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
+ "requires": {
+ "samsam": "1.x"
+ }
+ },
+ "fromentries": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz",
+ "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg=="
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
+ },
+ "fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "gensync": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q=="
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA=="
+ },
+ "graceful-fs": {
+ "version": "4.2.10",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
+ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
+ },
+ "handlebars": {
+ "version": "4.7.7",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
+ "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "requires": {
+ "minimist": "^1.2.5",
+ "neo-async": "^2.6.0",
+ "source-map": "^0.6.1",
+ "uglify-js": "^3.1.4",
+ "wordwrap": "^1.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "hasha": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz",
+ "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==",
+ "requires": {
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ }
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg=="
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+ },
+ "ini": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
+ "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-binary-path": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
+ "requires": {
+ "binary-extensions": "^2.0.0"
+ }
+ },
+ "is-core-module": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
+ },
+ "is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
+ },
+ "is-plain-obj": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
+ "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
+ },
+ "is-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
+ "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "is-unicode-supported": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
+ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
+ },
+ "is-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA=="
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw=="
+ },
+ "istanbul-lib-hook": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
+ "requires": {
+ "append-transform": "^2.0.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "istanbul-lib-processinfo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
+ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+ "requires": {
+ "archy": "^1.0.0",
+ "cross-spawn": "^7.0.0",
+ "istanbul-lib-coverage": "^3.0.0-alpha.1",
+ "make-dir": "^3.0.0",
+ "p-map": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "uuid": "^3.3.3"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
+ "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz",
+ "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==",
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
+ },
+ "js-yaml": {
+ "version": "3.14.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
+ "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA=="
+ },
+ "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="
+ },
+ "json5": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI="
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
+ },
+ "log-symbols": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
+ "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
+ "requires": {
+ "chalk": "^4.1.0",
+ "is-unicode-supported": "^0.1.0"
+ },
+ "dependencies": {
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "lolex": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.0.tgz",
+ "integrity": "sha512-uJkH2e0BVfU5KOJUevbTOtpDduooSarH5PopO+LfM/vZf8Z9sJzODqKev804JYM2i++ktJfUmC1le4LwFQ1VMg=="
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "requires": {
+ "semver": "^6.0.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.6",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
+ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ },
+ "mkdirp": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
+ "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
+ "requires": {
+ "minimist": "^1.2.6"
+ }
+ },
+ "mocha": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz",
+ "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==",
+ "requires": {
+ "@ungap/promise-all-settled": "1.1.2",
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
+ "diff": "5.0.0",
+ "escape-string-regexp": "4.0.0",
+ "find-up": "5.0.0",
+ "glob": "7.2.0",
+ "he": "1.2.0",
+ "js-yaml": "4.1.0",
+ "log-symbols": "4.1.0",
+ "minimatch": "5.0.1",
+ "ms": "2.1.3",
+ "nanoid": "3.3.3",
+ "serialize-javascript": "6.0.0",
+ "strip-json-comments": "3.1.1",
+ "supports-color": "8.1.1",
+ "workerpool": "6.2.1",
+ "yargs": "16.2.0",
+ "yargs-parser": "20.2.4",
+ "yargs-unparser": "2.0.0"
+ },
+ "dependencies": {
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
+ },
+ "escape-string-regexp": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
+ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
+ },
+ "find-up": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
+ "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
+ "requires": {
+ "locate-path": "^6.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
+ },
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
+ "locate-path": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
+ "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
+ "requires": {
+ "p-locate": "^5.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ },
+ "dependencies": {
+ "brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "requires": {
+ "balanced-match": "^1.0.0"
+ }
+ }
+ }
+ },
+ "p-limit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
+ "requires": {
+ "yocto-queue": "^0.1.0"
+ }
+ },
+ "p-locate": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
+ "requires": {
+ "p-limit": "^3.0.2"
+ }
+ },
+ "supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.4",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
+ "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA=="
+ }
+ }
+ },
+ "mocha-tap-reporter": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/mocha-tap-reporter/-/mocha-tap-reporter-0.1.3.tgz",
+ "integrity": "sha1-Emy70vggZJXnKxWZFNOXuOoXoig=",
+ "requires": {
+ "mocha": "*"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "ms": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
+ },
+ "nanoid": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz",
+ "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w=="
+ },
+ "native-promise-only": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/native-promise-only/-/native-promise-only-0.8.1.tgz",
+ "integrity": "sha1-IKMYwwy0X3H+et+/eyHJnBRy7xE="
+ },
+ "nconf": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz",
+ "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==",
+ "requires": {
+ "async": "^3.0.0",
+ "ini": "^2.0.0",
+ "secure-keys": "^1.0.0",
+ "yargs": "^16.1.1"
+ }
+ },
+ "neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
+ },
+ "nise": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz",
+ "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==",
+ "requires": {
+ "@sinonjs/formatio": "^3.2.1",
+ "@sinonjs/text-encoding": "^0.7.1",
+ "just-extend": "^4.0.2",
+ "lolex": "^5.0.1",
+ "path-to-regexp": "^1.7.0"
+ },
+ "dependencies": {
+ "@sinonjs/formatio": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz",
+ "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==",
+ "requires": {
+ "@sinonjs/commons": "^1",
+ "@sinonjs/samsam": "^3.1.0"
+ }
+ },
+ "just-extend": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
+ "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg=="
+ },
+ "lolex": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz",
+ "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==",
+ "requires": {
+ "@sinonjs/commons": "^1.7.0"
+ }
+ }
+ }
+ },
+ "nock": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/nock/-/nock-9.1.0.tgz",
+ "integrity": "sha512-u9QOLOZP0DlcKzmAzCuX5PRsIhbiRJupR7hJn1cCCT7VW3ZKUrEH/oxGEtVA8Xbu4EmzH9d/VK0x/3FxCGRrRg==",
+ "requires": {
+ "chai": ">=1.9.2 <4.0.0",
+ "debug": "^2.2.0",
+ "deep-equal": "^1.0.0",
+ "json-stringify-safe": "^5.0.1",
+ "lodash": "~4.17.2",
+ "mkdirp": "^0.5.0",
+ "propagate": "0.4.0",
+ "qs": "^6.0.2",
+ "semver": "^5.3.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ }
+ }
+ },
+ "node-preload": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
+ "requires": {
+ "process-on-spawn": "^1.0.0"
+ }
+ },
+ "node-releases": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
+ "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q=="
+ },
+ "normalize-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
+ },
+ "nyc": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
+ "requires": {
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "caching-transform": "^4.0.0",
+ "convert-source-map": "^1.7.0",
+ "decamelize": "^1.2.0",
+ "find-cache-dir": "^3.2.0",
+ "find-up": "^4.1.0",
+ "foreground-child": "^2.0.0",
+ "get-package-type": "^0.1.0",
+ "glob": "^7.1.6",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-hook": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-processinfo": "^2.0.2",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.2",
+ "make-dir": "^3.0.0",
+ "node-preload": "^0.2.1",
+ "p-map": "^3.0.0",
+ "process-on-spawn": "^1.0.0",
+ "resolve-from": "^5.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "spawn-wrap": "^2.0.0",
+ "test-exclude": "^6.0.0",
+ "yargs": "^15.0.2"
+ },
+ "dependencies": {
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "y18n": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
+ "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.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": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
+ },
+ "package-hash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
+ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
+ "requires": {
+ "graceful-fs": "^4.1.15",
+ "hasha": "^5.0.0",
+ "lodash.flattendeep": "^4.4.0",
+ "release-zalgo": "^1.0.0"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "path-to-regexp": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz",
+ "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=",
+ "requires": {
+ "isarray": "0.0.1"
+ }
+ },
+ "picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
+ },
+ "picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "process-on-spawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
+ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
+ "requires": {
+ "fromentries": "^1.2.0"
+ }
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "propagate": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.4.0.tgz",
+ "integrity": "sha1-8/zKCm/gZzanulcpZgaWF8EwtIE="
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.0",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
+ "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "requires": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.7",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
+ "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ }
+ }
+ },
+ "readdirp": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
+ "requires": {
+ "picomatch": "^2.2.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "release-zalgo": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
+ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
+ "requires": {
+ "es6-error": "^4.0.1"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+ },
+ "require-main-filename": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
+ },
+ "resolve": {
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
+ "requires": {
+ "is-core-module": "^2.9.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "requires": {
+ "glob": "^7.1.3"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg=="
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "secure-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz",
+ "integrity": "sha1-8MgtmKOxOah3aogIBQuCRDEIf8o="
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
+ },
+ "serialize-javascript": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
+ "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "signal-exit": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
+ },
+ "sinon": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.0.1.tgz",
+ "integrity": "sha512-4qIY0pCWCvGCJpV/1JkFu9kbsNEZ9O34cG1oru/c7OCDtrEs50Gq/VjkA2ID5ZwLyoNx1i1ws118oh/p6fVeDg==",
+ "requires": {
+ "diff": "^3.1.0",
+ "formatio": "1.2.0",
+ "lodash.get": "^4.4.2",
+ "lolex": "^2.1.3",
+ "native-promise-only": "^0.8.1",
+ "nise": "^1.1.1",
+ "path-to-regexp": "^1.7.0",
+ "samsam": "^1.1.3",
+ "text-encoding": "0.6.4",
+ "type-detect": "^4.0.0"
+ },
+ "dependencies": {
+ "diff": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
+ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA=="
+ },
+ "type-detect": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "spawn-wrap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
+ "requires": {
+ "foreground-child": "^2.0.0",
+ "is-windows": "^1.0.2",
+ "make-dir": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "which": "^2.0.1"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "string-width": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
+ "requires": {
+ "ansi-regex": "^5.0.1"
+ }
+ },
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w=="
+ },
+ "strip-json-comments": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "text-encoding": {
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz",
+ "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk="
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+ },
+ "to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ },
+ "tunnel": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz",
+ "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM="
+ },
+ "type-detect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI="
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA=="
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ=="
+ },
+ "uglify-js": {
+ "version": "3.17.4",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
+ "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
+ "optional": true
+ },
+ "util": {
+ "version": "0.10.3",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+ "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+ "requires": {
+ "inherits": "2.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
+ },
+ "workerpool": {
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw=="
+ },
+ "wrap-ansi": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ },
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
+ "xml2js": {
+ "version": "0.4.19",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+ "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": "~9.0.1"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+ },
+ "y18n": {
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="
+ },
+ "yargs": {
+ "version": "16.2.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
+ "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "requires": {
+ "cliui": "^7.0.2",
+ "escalade": "^3.1.1",
+ "get-caller-file": "^2.0.5",
+ "require-directory": "^2.1.1",
+ "string-width": "^4.2.0",
+ "y18n": "^5.0.5",
+ "yargs-parser": "^20.2.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "20.2.9",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
+ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w=="
+ },
+ "yargs-unparser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
+ "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
+ "requires": {
+ "camelcase": "^6.0.0",
+ "decamelize": "^4.0.0",
+ "flat": "^5.0.2",
+ "is-plain-obj": "^2.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
+ "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="
+ },
+ "decamelize": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
+ "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ=="
+ }
+ }
+ },
+ "yocto-queue": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
+ "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q=="
+ }
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
+ },
+ "async-mutex": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz",
+ "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==",
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
+ },
+ "aws4": {
+ "version": "1.12.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz",
+ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
+ },
+ "azp-tasks-az-blobstorage-provider": {
+ "version": "2.219.1",
+ "resolved": "https://registry.npmjs.org/azp-tasks-az-blobstorage-provider/-/azp-tasks-az-blobstorage-provider-2.219.1.tgz",
+ "integrity": "sha512-crTVPRVneukXgYNrcznH9jWAtB0K9+Bg19UWzzVl30+Hn5LLlypn6U9uWekj4XV38iiMCR9XwZgw3j+S8Z0h+Q==",
+ "requires": {
+ "artifact-engine": "1.2.0",
+ "azure-pipelines-task-lib": "^3.4.0",
+ "azure-storage": "^2.10.7",
+ "q": "1.4.1"
+ },
+ "dependencies": {
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ }
+ }
+ }
+ }
+ },
+ "azure-devops-node-api": {
+ "version": "12.1.0",
+ "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.1.0.tgz",
+ "integrity": "sha512-VY+G45eNKVJfMIO0uyZfbi4PzUR8JHEfsHQjEUAXUGRkYhhBbhGHjy8cpiyYFxLXc3a4PL5cqgqqV/YD1SaCXg==",
+ "requires": {
+ "tunnel": "0.0.6",
+ "typed-rest-client": "^1.8.4"
+ }
+ },
+ "azure-pipelines-task-lib": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.5.0.tgz",
+ "integrity": "sha512-NGxrpggmho4SxWeEnVID7xEClDHC3o4RndfdBzTO5iBWhMHkQp95N1Z4oaywJyiC5Xa92wkUvqzSm6MSLKzYoQ==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ },
+ "dependencies": {
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ }
+ }
+ },
+ "azure-pipelines-tasks-azure-arm-rest": {
+ "version": "3.223.6",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.223.6.tgz",
+ "integrity": "sha512-jQeanC/MlqySO3WgUBIxDMDnDG9FnzF1a1qJVSPbPmdKmdIdtFLhuNaB1vxkN1eqgZB6QvpOdY4g3bxQH57Epw==",
+ "requires": {
+ "@azure/msal-node": "1.14.5",
+ "@types/jsonwebtoken": "^8.5.8",
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^10.17.0",
+ "@types/q": "1.5.4",
+ "async-mutex": "^0.4.0",
+ "azure-devops-node-api": "^12.0.0",
+ "azure-pipelines-task-lib": "^3.4.0",
+ "https-proxy-agent": "^4.0.0",
+ "jsonwebtoken": "^8.5.1",
+ "node-fetch": "^2.6.7",
+ "q": "1.5.1",
+ "typed-rest-client": "1.8.4",
+ "xml2js": "0.4.13"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ },
+ "@types/q": {
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
+ "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-3.4.0.tgz",
+ "integrity": "sha512-3eC4OTFw+7xD7A2aUhxR/j+jRlTI+vVfS0CGxt1pCLs4c/KmY0tQWgbqjD3157kmiucWxELBvgZHaD2gCBe9fg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "mockery": "^2.1.0",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "xml2js": {
+ "version": "0.4.13",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.13.tgz",
+ "integrity": "sha512-BoxD65qWA2p4znzbaati/Td19uFEc0X6ydj0bFphJO62RrNaGqOyW6ljLWPo3GKDbvW/6dnxAoRX01BsgEWsMA==",
+ "requires": {
+ "sax": ">=0.6.0",
+ "xmlbuilder": ">=2.4.6"
+ }
+ }
+ }
+ },
+ "azure-pipelines-tasks-utility-common": {
+ "version": "3.225.1",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.225.1.tgz",
+ "integrity": "sha512-4wtVKuvx2PcQI0W8xkMdS/S+tf9Qu7wMJl4HSTLE1gjQ2x9o/6QbhMogz6O1+8ofxvTqmI4scA7GHKccDAwQpQ==",
+ "requires": {
+ "@types/node": "^16.11.39",
+ "azure-pipelines-task-lib": "^4.4.0",
+ "azure-pipelines-tool-lib": "^2.0.0-preview",
+ "js-yaml": "3.13.1",
+ "semver": "^5.4.1"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "16.18.46",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz",
+ "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg=="
+ }
+ }
+ },
+ "azure-pipelines-tool-lib": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.4.tgz",
+ "integrity": "sha512-LgAelZKJe3k/t3NsKSKzjeRviphns0w0p5tgwz8uHN70I9m2TToiOKl+fogrdXcM6+jiLBk5KTqrcRBqPpv/XA==",
+ "requires": {
+ "@types/semver": "^5.3.0",
+ "@types/uuid": "^3.4.5",
+ "azure-pipelines-task-lib": "^4.1.0",
+ "semver": "^5.7.0",
+ "semver-compare": "^1.0.0",
+ "typed-rest-client": "^1.8.6",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "typed-rest-client": {
+ "version": "1.8.11",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz",
+ "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ }
+ }
+ },
+ "azure-storage": {
+ "version": "2.10.7",
+ "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.10.7.tgz",
+ "integrity": "sha512-4oeFGtn3Ziw/fGs/zkoIpKKtygnCVIcZwzJ7UQzKTxhkGQqVCByOFbYqMGYR3L+wOsunX9lNfD0jc51SQuKSSA==",
+ "requires": {
+ "browserify-mime": "^1.2.9",
+ "extend": "^3.0.2",
+ "json-edm-parser": "~0.1.2",
+ "json-schema": "~0.4.0",
+ "md5.js": "^1.3.4",
+ "readable-stream": "^2.0.0",
+ "request": "^2.86.0",
+ "underscore": "^1.12.1",
+ "uuid": "^3.0.0",
+ "validator": "^13.7.0",
+ "xml2js": "~0.2.8",
+ "xmlbuilder": "^9.0.7"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+ "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "browserify-mime": {
+ "version": "1.2.9",
+ "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz",
+ "integrity": "sha512-uz+ItyJXBLb6wgon1ELEiVowJBEsy03PUWGRQU7cxxx9S+DW2hujPp+DaMYEOClRPzsn7NB99NtJ6pGnt8y+CQ=="
+ },
+ "buffer-equal-constant-time": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
+ "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+ "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "ecdsa-sig-formatter": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
+ "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
+ },
+ "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": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "hash-base": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "requires": {
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ }
+ }
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "requires": {
+ "agent-base": "5",
+ "debug": "4"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g=="
+ }
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+ },
+ "json-edm-parser": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz",
+ "integrity": "sha512-J1U9mk6lf8dPULcaMwALXB6yel3cJyyhk9Z8FQ4sMwiazNwjaUhegIcpZyZFNMvLRtnXwh+TkCjX9uYUObBBYA==",
+ "requires": {
+ "jsonparse": "~1.2.0"
+ }
+ },
+ "json-schema": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "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": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
+ },
+ "jsonparse": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz",
+ "integrity": "sha512-LkDEYtKnPFI9hQ/IURETe6F1dUH80cbRkaF6RaViSwoSNPwaxQpi6TgJGvJKyLQ2/9pQW+XCxK3hBoR44RAjkg=="
+ },
+ "jsonwebtoken": {
+ "version": "8.5.1",
+ "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz",
+ "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==",
+ "requires": {
+ "jws": "^3.2.2",
+ "lodash.includes": "^4.3.0",
+ "lodash.isboolean": "^3.0.3",
+ "lodash.isinteger": "^4.0.4",
+ "lodash.isnumber": "^3.0.3",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.isstring": "^4.0.1",
+ "lodash.once": "^4.0.0",
+ "ms": "^2.1.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "jwa": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
+ "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
+ "requires": {
+ "buffer-equal-constant-time": "1.0.1",
+ "ecdsa-sig-formatter": "1.0.11",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "jws": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
+ "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
+ "requires": {
+ "jwa": "^1.4.1",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "lodash.includes": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
+ "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w=="
+ },
+ "lodash.isboolean": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
+ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg=="
+ },
+ "lodash.isinteger": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
+ "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA=="
+ },
+ "lodash.isnumber": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
+ "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw=="
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA=="
+ },
+ "lodash.isstring": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
+ "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw=="
+ },
+ "lodash.once": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
+ "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg=="
+ },
+ "md5.js": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
+ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+ "requires": {
+ "hash-base": "^3.0.0",
+ "inherits": "^2.0.1",
+ "safe-buffer": "^5.1.2"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "mockery": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz",
+ "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node-fetch": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+ "requires": {
+ "whatwg-url": "^5.0.0"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "psl": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz",
+ "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag=="
+ },
+ "punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA=="
+ },
+ "q": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz",
+ "integrity": "sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "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.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "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==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+ "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sax": {
+ "version": "0.5.8",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz",
+ "integrity": "sha512-c0YL9VcSfcdH3F1Qij9qpYJFpKFKMXNOkLWFssBL3RuF7ZS8oZhllR2rWlCRjDTJsfq3R6wbSsaRU6o0rkEdNw=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
+ },
+ "sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tr46": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
+ },
+ "tslib": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
+ },
+ "tunnel": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz",
+ "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg=="
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+ },
+ "typed-rest-client": {
+ "version": "1.8.4",
+ "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.4.tgz",
+ "integrity": "sha512-MyfKKYzk3I6/QQp6e1T50py4qg+c+9BzOEl2rBmQIpStwNUoqQ73An+Tkfy9YuV7O+o2mpVVJpe+fH//POZkbg==",
+ "requires": {
+ "qs": "^6.9.1",
+ "tunnel": "0.0.6",
+ "underscore": "^1.12.1"
+ }
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.13.6",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz",
+ "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A=="
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "validator": {
+ "version": "13.11.0",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz",
+ "integrity": "sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ },
+ "dependencies": {
+ "core-util-is": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+ }
+ }
+ },
+ "webidl-conversions": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
+ },
+ "whatwg-url": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
+ "requires": {
+ "tr46": "~0.0.3",
+ "webidl-conversions": "^3.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ },
+ "xml2js": {
+ "version": "0.2.8",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz",
+ "integrity": "sha512-ZHZBIAO55GHCn2jBYByVPHvHS+o3j8/a/qmpEe6kxO3cTnTCWC3Htq9RYJ5G4XMwMMClD2QkXA9SNdPadLyn3Q==",
+ "requires": {
+ "sax": "0.5.x"
+ }
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ=="
+ }
+ }
+}
diff --git a/_generated/JavaToolInstallerV0_Node20/package.json b/_generated/JavaToolInstallerV0_Node20/package.json
new file mode 100644
index 000000000000..16a222d9e4cf
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "java-tool-installer",
+ "private": "true",
+ "description": "Java Tool Installer",
+ "main": "javaToolInstaller.js",
+ "scripts": {
+ "build": "node ../../make.js build --task JavaToolInstallerV0",
+ "test": "node ../../make.js test --task JavaToolInstallerV0"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "keywords": [
+ "Azure",
+ "Pipelines",
+ "Tasks",
+ "Java"
+ ],
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/mocha": "^5.2.7",
+ "@types/node": "^20.3.1",
+ "@types/q": "^1.0.7",
+ "agent-base": "^6.0.2",
+ "azp-tasks-az-blobstorage-provider": "^2.219.1",
+ "azure-pipelines-task-lib": "^4.0.0-preview",
+ "azure-pipelines-tasks-azure-arm-rest": "3.223.6",
+ "azure-pipelines-tasks-utility-common": "^3.0.3",
+ "azure-pipelines-tool-lib": "^2.0.0-preview"
+ },
+ "devDependencies": {
+ "typescript": "5.1.6"
+ }
+}
diff --git a/_generated/JavaToolInstallerV0_Node20/task.json b/_generated/JavaToolInstallerV0_Node20/task.json
new file mode 100644
index 000000000000..b9d350b853c9
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/task.json
@@ -0,0 +1,239 @@
+{
+ "id": "C0E0B74F-0931-47C7-AC27-7C5A19456A36",
+ "name": "JavaToolInstaller",
+ "friendlyName": "Java tool installer",
+ "description": "Acquire a specific version of Java from a user-supplied Azure blob or the tool cache and sets JAVA_HOME",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/java-tool-installer",
+ "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?linkid=875287) or [see the Java documentation](https://docs.oracle.com/java/)",
+ "category": "Tool",
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 0,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "satisfies": [
+ "Java",
+ "JDK"
+ ],
+ "demands": [],
+ "groups": [
+ {
+ "name": "JavaInAzureGroup",
+ "displayName": "Download Java from an Azure blob",
+ "isExpanded": true
+ }
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "Use Java $(versionSpec)",
+ "inputs": [
+ {
+ "name": "versionSpec",
+ "type": "string",
+ "label": "JDK version",
+ "defaultValue": "8",
+ "required": true,
+ "helpMarkDown": "A number that specifies the JDK version to make available on the path. Use a whole number version, such as 10"
+ },
+ {
+ "name": "jdkArchitectureOption",
+ "type": "pickList",
+ "label": "JDK architecture",
+ "options": {
+ "x64": "X64",
+ "x86": "X86"
+ },
+ "required": true,
+ "helpMarkDown": "The architecture (x86, x64) of the JDK."
+ },
+ {
+ "name": "jdkSourceOption",
+ "type": "pickList",
+ "label": "JDK source",
+ "required": true,
+ "options": {
+ "AzureStorage": "Azure Storage",
+ "LocalDirectory": "Local Directory",
+ "PreInstalled": "Pre-installed"
+ },
+ "helpMarkDown": "Source for the compressed JDK."
+ },
+ {
+ "name": "jdkFile",
+ "type": "filePath",
+ "label": "JDK file",
+ "required": true,
+ "visibleRule": "jdkSourceOption == LocalDirectory",
+ "helpMarkDown": "Path to where the compressed JDK is located. The path could be in your source repository or a local path on the agent."
+ },
+ {
+ "name": "azureResourceManagerEndpoint",
+ "type": "connectedService:AzureRM",
+ "label": "Azure subscription",
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Choose the Azure Resource Manager subscription for the JDK."
+ },
+ {
+ "name": "azureStorageAccountName",
+ "type": "pickList",
+ "label": "Storage account name",
+ "required": true,
+ "properties": {
+ "EditableOptions": "True"
+ },
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Azure Classic and Resource Manager storage accounts are listed. Select the storage account name in which the JDK is located."
+ },
+ {
+ "name": "azureContainerName",
+ "type": "pickList",
+ "label": "Container name",
+ "properties": {
+ "EditableOptions": "True"
+ },
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Name of the container in the storage account in which the JDK is located."
+ },
+ {
+ "name": "azureCommonVirtualFile",
+ "type": "string",
+ "label": "Common virtual path",
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Path to the JDK inside the Azure storage container."
+ },
+ {
+ "name": "jdkDestinationDirectory",
+ "type": "filePath",
+ "label": "Destination directory",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "On Linux and Windows, this is used as the destination directory for JDK installation. On macOS, this directory is used as a temporary folder for extracting of .dmg's since macOS doesn't support installing of JDK to specific directory."
+ },
+ {
+ "name": "azureResourceGroupName",
+ "type": "string",
+ "label": "Resource Group name",
+ "required": false,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "Resource Group name of the storage account."
+ },
+ {
+ "name": "cleanDestinationDirectory",
+ "type": "boolean",
+ "label": "Clean destination directory",
+ "required": true,
+ "defaultValue": "true",
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "Select this option to clean the destination directory before JDK is extracted into it."
+ },
+ {
+ "name": "createExtractDirectory",
+ "type": "boolean",
+ "label": "Create directory for extracting",
+ "required": false,
+ "defaultValue": true,
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "By default, task is creating a directory similar to this JAVA_HOME_8_X64_OpenJDK_zip for extracting JDK. This option allows to disable creation of this folder, in this case, JDK will be located in the root of jdkDestinationDirectory"
+ }
+ ],
+ "dataSourceBindings": [
+ {
+ "endpointId": "$(azureResourceManagerEndpoint)",
+ "target": "azureStorageAccountName",
+ "dataSourceName": "AzureStorageAccountRMandClassic"
+ },
+ {
+ "target": "azureContainerName",
+ "endpointId": "$(azureResourceManagerEndpoint)",
+ "dataSourceName": "AzureStorageContainer",
+ "resultTemplate": "{ \"Value\" : \"{{ Name }}\", \"DisplayValue\" : \"{{ Name }}\" }",
+ "parameters": {
+ "storageAccount": "$(azureStorageAccountName)"
+ }
+ }
+ ],
+ "execution": {
+ "Node10": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "PATH",
+ "JAVA_HOME*"
+ ]
+ }
+ },
+ "messages": {
+ "DownloadFromAzureBlobStorage": "Downloading artifacts from Azure blob storage, Container Name: %s",
+ "SuccessFullyFetchedItemList": "Successfully fetched list of items",
+ "StorageAccountDoesNotExist": "Failed to get azure storage account with name %s.",
+ "RequestedUrlTooLong": "Requested URL is too long, this usually happen when you have a lot of Resource Groups in the subscription, try to set azureResourceGroupName input.",
+ "UnzipExtractFile": "Extracting file: %s",
+ "SevenZipExtractFile": "Extracting file: %s",
+ "TarExtractFile": "Extracting file: %s",
+ "ExtractFileFailedMsg": "Extraction failed for file: %s \ncode: %d \nstdout: %s \nstderr: %s \nerror: %s;",
+ "ExtractNonExistFile": "Extraction failed for file: %s because it does not exist.",
+ "ExtractDirFailed": "Extraction failed for file: %s because it is a directory.",
+ "CreateTempDir": "Creating temp folder: %s to decompress: %s",
+ "TempDir": "tempFolder = %s",
+ "DecompressedTempTar": "Decompressed temporary tar from: %s to: %s",
+ "RemoveTempDir": "Removing temp folder: %s",
+ "ExtractFailedCannotCreate": "Extraction failed for file: %s because temporary location could not be created: %s",
+ "CleanDestDir": "Cleaning destination folder before extraction: %s",
+ "CreateDestDir": "Creating destination folder: %s",
+ "RetrievingJdkFromAzure": "Retrieving the JDK from Azure blob storage.",
+ "RetrievingJdkFromLocalPath": "Retrieving the JDK from local path.",
+ "SucceedMsg": "Successfully extracted all files.",
+ "SetJavaHome": "JAVA_HOME is being set to: %s",
+ "SetExtendedJavaHome": "%s is being set to: %s",
+ "UnsupportedFileExtension": "Specified JDK source file does not have a supported file extension.",
+ "CouldNotFetchAccessTokenforAzureStatusCode": "Could not fetch access token for Azure. Status code: %s, status message: %s",
+ "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not fetch access token for Managed Service Principal. Please configure Managed Service Identity (MSI) for virtual machine 'https://aka.ms/azure-msi-docs'. Status code: %s, status message: %s",
+ "CouldNotFetchAccessTokenforMSIStatusCode": "Could not fetch access token for Managed Service Principal. Status code: %s, status message: %s",
+ "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.",
+ "CorrelationIdForARM": "Correlation ID from ARM api call response : %s",
+ "JavaNotPreinstalled": "Java %s is not preinstalled on this agent",
+ "UsePreinstalledJava": "Use preinstalled JDK from %s",
+ "WrongArchiveStructure": "JDK file is not valid. Verify if JDK file contains only one root folder with 'bin' inside.",
+ "WrongArchiveFile": "Archive file is wrong. There is not any folder which contains JDK",
+ "ShareAccessError": "Network shared resource not available: (%s)",
+ "UnsupportedDMGStructure": "JDK file is not supported. Verify if JDK file contains exactly one folder inside.",
+ "NoPKGFile": "Could not find PKG file.",
+ "SeveralPKGFiles": "Found more than one PKG files.",
+ "InstallJDK": "Installing JDK.",
+ "AttachDiskImage": "Attaching a disk image.",
+ "DetachDiskImage": "Detaching a disk image.",
+ "PkgPathDoesNotExist": "Package path does not exist.",
+ "PreInstalledJavaUpgraded": "Preinstalled JDK updated.",
+ "JavaSuccessfullyInstalled": "Java has been successfully installed",
+ "ArchiveWasExtractedEarlier": "Archive with JDK was extracted earlier - skipping extracting",
+ "ExtractingArchiveToPath": "Extracting archive to: %s",
+ "ErrorCleaningFolder": "Folder cleaning error: %s"
+ },
+ "_buildConfigMapping": {
+ "Default": "0.229.3",
+ "Node20-225": "0.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/task.loc.json b/_generated/JavaToolInstallerV0_Node20/task.loc.json
new file mode 100644
index 000000000000..eb9f5077f07c
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/task.loc.json
@@ -0,0 +1,239 @@
+{
+ "id": "C0E0B74F-0931-47C7-AC27-7C5A19456A36",
+ "name": "JavaToolInstaller",
+ "friendlyName": "ms-resource:loc.friendlyName",
+ "description": "ms-resource:loc.description",
+ "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/java-tool-installer",
+ "helpMarkDown": "ms-resource:loc.helpMarkDown",
+ "category": "Tool",
+ "runsOn": [
+ "Agent",
+ "DeploymentGroup"
+ ],
+ "author": "Microsoft Corporation",
+ "version": {
+ "Major": 0,
+ "Minor": 229,
+ "Patch": 4
+ },
+ "satisfies": [
+ "Java",
+ "JDK"
+ ],
+ "demands": [],
+ "groups": [
+ {
+ "name": "JavaInAzureGroup",
+ "displayName": "ms-resource:loc.group.displayName.JavaInAzureGroup",
+ "isExpanded": true
+ }
+ ],
+ "minimumAgentVersion": "2.182.1",
+ "instanceNameFormat": "ms-resource:loc.instanceNameFormat",
+ "inputs": [
+ {
+ "name": "versionSpec",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.versionSpec",
+ "defaultValue": "8",
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.versionSpec"
+ },
+ {
+ "name": "jdkArchitectureOption",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.jdkArchitectureOption",
+ "options": {
+ "x64": "X64",
+ "x86": "X86"
+ },
+ "required": true,
+ "helpMarkDown": "ms-resource:loc.input.help.jdkArchitectureOption"
+ },
+ {
+ "name": "jdkSourceOption",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.jdkSourceOption",
+ "required": true,
+ "options": {
+ "AzureStorage": "Azure Storage",
+ "LocalDirectory": "Local Directory",
+ "PreInstalled": "Pre-installed"
+ },
+ "helpMarkDown": "ms-resource:loc.input.help.jdkSourceOption"
+ },
+ {
+ "name": "jdkFile",
+ "type": "filePath",
+ "label": "ms-resource:loc.input.label.jdkFile",
+ "required": true,
+ "visibleRule": "jdkSourceOption == LocalDirectory",
+ "helpMarkDown": "ms-resource:loc.input.help.jdkFile"
+ },
+ {
+ "name": "azureResourceManagerEndpoint",
+ "type": "connectedService:AzureRM",
+ "label": "ms-resource:loc.input.label.azureResourceManagerEndpoint",
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureResourceManagerEndpoint"
+ },
+ {
+ "name": "azureStorageAccountName",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.azureStorageAccountName",
+ "required": true,
+ "properties": {
+ "EditableOptions": "True"
+ },
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureStorageAccountName"
+ },
+ {
+ "name": "azureContainerName",
+ "type": "pickList",
+ "label": "ms-resource:loc.input.label.azureContainerName",
+ "properties": {
+ "EditableOptions": "True"
+ },
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureContainerName"
+ },
+ {
+ "name": "azureCommonVirtualFile",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.azureCommonVirtualFile",
+ "required": true,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureCommonVirtualFile"
+ },
+ {
+ "name": "jdkDestinationDirectory",
+ "type": "filePath",
+ "label": "ms-resource:loc.input.label.jdkDestinationDirectory",
+ "defaultValue": "",
+ "required": true,
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "ms-resource:loc.input.help.jdkDestinationDirectory"
+ },
+ {
+ "name": "azureResourceGroupName",
+ "type": "string",
+ "label": "ms-resource:loc.input.label.azureResourceGroupName",
+ "required": false,
+ "visibleRule": "jdkSourceOption == AzureStorage",
+ "helpMarkDown": "ms-resource:loc.input.help.azureResourceGroupName"
+ },
+ {
+ "name": "cleanDestinationDirectory",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.cleanDestinationDirectory",
+ "required": true,
+ "defaultValue": "true",
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "ms-resource:loc.input.help.cleanDestinationDirectory"
+ },
+ {
+ "name": "createExtractDirectory",
+ "type": "boolean",
+ "label": "ms-resource:loc.input.label.createExtractDirectory",
+ "required": false,
+ "defaultValue": true,
+ "visibleRule": "jdkSourceOption != PreInstalled",
+ "helpMarkDown": "ms-resource:loc.input.help.createExtractDirectory"
+ }
+ ],
+ "dataSourceBindings": [
+ {
+ "endpointId": "$(azureResourceManagerEndpoint)",
+ "target": "azureStorageAccountName",
+ "dataSourceName": "AzureStorageAccountRMandClassic"
+ },
+ {
+ "target": "azureContainerName",
+ "endpointId": "$(azureResourceManagerEndpoint)",
+ "dataSourceName": "AzureStorageContainer",
+ "resultTemplate": "{ \"Value\" : \"{{ Name }}\", \"DisplayValue\" : \"{{ Name }}\" }",
+ "parameters": {
+ "storageAccount": "$(azureStorageAccountName)"
+ }
+ }
+ ],
+ "execution": {
+ "Node10": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ },
+ "Node16": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ },
+ "Node20": {
+ "target": "javatoolinstaller.js",
+ "argumentFormat": ""
+ }
+ },
+ "restrictions": {
+ "commands": {
+ "mode": "restricted"
+ },
+ "settableVariables": {
+ "allowed": [
+ "PATH",
+ "JAVA_HOME*"
+ ]
+ }
+ },
+ "messages": {
+ "DownloadFromAzureBlobStorage": "ms-resource:loc.messages.DownloadFromAzureBlobStorage",
+ "SuccessFullyFetchedItemList": "ms-resource:loc.messages.SuccessFullyFetchedItemList",
+ "StorageAccountDoesNotExist": "ms-resource:loc.messages.StorageAccountDoesNotExist",
+ "RequestedUrlTooLong": "ms-resource:loc.messages.RequestedUrlTooLong",
+ "UnzipExtractFile": "ms-resource:loc.messages.UnzipExtractFile",
+ "SevenZipExtractFile": "ms-resource:loc.messages.SevenZipExtractFile",
+ "TarExtractFile": "ms-resource:loc.messages.TarExtractFile",
+ "ExtractFileFailedMsg": "ms-resource:loc.messages.ExtractFileFailedMsg",
+ "ExtractNonExistFile": "ms-resource:loc.messages.ExtractNonExistFile",
+ "ExtractDirFailed": "ms-resource:loc.messages.ExtractDirFailed",
+ "CreateTempDir": "ms-resource:loc.messages.CreateTempDir",
+ "TempDir": "ms-resource:loc.messages.TempDir",
+ "DecompressedTempTar": "ms-resource:loc.messages.DecompressedTempTar",
+ "RemoveTempDir": "ms-resource:loc.messages.RemoveTempDir",
+ "ExtractFailedCannotCreate": "ms-resource:loc.messages.ExtractFailedCannotCreate",
+ "CleanDestDir": "ms-resource:loc.messages.CleanDestDir",
+ "CreateDestDir": "ms-resource:loc.messages.CreateDestDir",
+ "RetrievingJdkFromAzure": "ms-resource:loc.messages.RetrievingJdkFromAzure",
+ "RetrievingJdkFromLocalPath": "ms-resource:loc.messages.RetrievingJdkFromLocalPath",
+ "SucceedMsg": "ms-resource:loc.messages.SucceedMsg",
+ "SetJavaHome": "ms-resource:loc.messages.SetJavaHome",
+ "SetExtendedJavaHome": "ms-resource:loc.messages.SetExtendedJavaHome",
+ "UnsupportedFileExtension": "ms-resource:loc.messages.UnsupportedFileExtension",
+ "CouldNotFetchAccessTokenforAzureStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforAzureStatusCode",
+ "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode",
+ "CouldNotFetchAccessTokenforMSIStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIStatusCode",
+ "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal",
+ "CorrelationIdForARM": "ms-resource:loc.messages.CorrelationIdForARM",
+ "JavaNotPreinstalled": "ms-resource:loc.messages.JavaNotPreinstalled",
+ "UsePreinstalledJava": "ms-resource:loc.messages.UsePreinstalledJava",
+ "WrongArchiveStructure": "ms-resource:loc.messages.WrongArchiveStructure",
+ "WrongArchiveFile": "ms-resource:loc.messages.WrongArchiveFile",
+ "ShareAccessError": "ms-resource:loc.messages.ShareAccessError",
+ "UnsupportedDMGStructure": "ms-resource:loc.messages.UnsupportedDMGStructure",
+ "NoPKGFile": "ms-resource:loc.messages.NoPKGFile",
+ "SeveralPKGFiles": "ms-resource:loc.messages.SeveralPKGFiles",
+ "InstallJDK": "ms-resource:loc.messages.InstallJDK",
+ "AttachDiskImage": "ms-resource:loc.messages.AttachDiskImage",
+ "DetachDiskImage": "ms-resource:loc.messages.DetachDiskImage",
+ "PkgPathDoesNotExist": "ms-resource:loc.messages.PkgPathDoesNotExist",
+ "PreInstalledJavaUpgraded": "ms-resource:loc.messages.PreInstalledJavaUpgraded",
+ "JavaSuccessfullyInstalled": "ms-resource:loc.messages.JavaSuccessfullyInstalled",
+ "ArchiveWasExtractedEarlier": "ms-resource:loc.messages.ArchiveWasExtractedEarlier",
+ "ExtractingArchiveToPath": "ms-resource:loc.messages.ExtractingArchiveToPath",
+ "ErrorCleaningFolder": "ms-resource:loc.messages.ErrorCleaningFolder"
+ },
+ "_buildConfigMapping": {
+ "Default": "0.229.3",
+ "Node20-225": "0.229.4"
+ }
+}
\ No newline at end of file
diff --git a/_generated/JavaToolInstallerV0_Node20/taskutils.ts b/_generated/JavaToolInstallerV0_Node20/taskutils.ts
new file mode 100644
index 000000000000..9cd9571b4e81
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/taskutils.ts
@@ -0,0 +1,57 @@
+import * as tl from 'azure-pipelines-task-lib/task';
+import * as os from 'os';
+
+import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner';
+
+/**
+ * Returns promise which will be resolved in given number of milliseconds.
+ * @param sleepDurationInMilliSeconds Number of milliseconds.
+ * @returns Promise
+ */
+export function sleepFor(sleepDurationInMilliSeconds: number): Promise {
+ return new Promise((resolve, reject) => {
+ setTimeout(resolve, sleepDurationInMilliSeconds);
+ });
+}
+
+/**
+ * Run a tool with `sudo` on Linux and macOS.
+ * Precondition: `toolName` executable is in PATH.
+ * @returns ToolRunner
+ */
+export function sudo(toolName: string): ToolRunner {
+ if (os.platform() === 'win32') {
+ return tl.tool(toolName);
+ } else {
+ const toolPath = tl.which(toolName);
+ return tl.tool('sudo').line(toolPath);
+ }
+}
+
+/**
+ * Attach a disk image.
+ * Only for macOS.
+ * Returns promise with return code.
+ * @param sourceFile Path to a disk image file.
+ * @returns number
+ */
+export async function attach(sourceFile: string): Promise {
+ console.log(tl.loc('AttachDiskImage'));
+ const hdiutil = sudo('hdiutil');
+ hdiutil.line(`attach "${sourceFile}"`);
+ return hdiutil.exec();
+}
+
+/**
+ * Detach a disk image.
+ * Only for macOS.
+ * Returns promise with return code.
+ * @param volumePath Path to the attached disk image.
+ * @returns number
+ */
+export async function detach(volumePath: string): Promise {
+ console.log(tl.loc('DetachDiskImage'));
+ const hdiutil = sudo('hdiutil');
+ hdiutil.line(`detach "${volumePath}"`);
+ return hdiutil.exec();
+}
diff --git a/_generated/JavaToolInstallerV0_Node20/tsconfig.json b/_generated/JavaToolInstallerV0_Node20/tsconfig.json
new file mode 100644
index 000000000000..875bb90cd697
--- /dev/null
+++ b/_generated/JavaToolInstallerV0_Node20/tsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions": {
+ "target": "ES6",
+ "module": "commonjs"
+ }
+}
diff --git a/_generated/JenkinsQueueJobV2.versionmap.txt b/_generated/JenkinsQueueJobV2.versionmap.txt
new file mode 100644
index 000000000000..4a312fb3b52c
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2.versionmap.txt
@@ -0,0 +1,2 @@
+Default|2.229.3
+Node20-225|2.229.4
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/de-DE/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/de-DE/resources.resjson
new file mode 100644
index 000000000000..983a9a6e2dfd
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/de-DE/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Jenkins-Warteschlangenauftrag",
+ "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](http://go.microsoft.com/fwlink/?LinkId=816956). Diese Aufgabe reiht einen Auftrag auf einem [Jenkins](https://jenkins.io/)-Server in die Warteschlange ein. Für vollständige Integrationsfunktionen muss das [Team Foundation Server-Plug-In](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin) für Jenkins installiert werden.",
+ "loc.description": "Reiht einen Auftrag auf einem Jenkins-Server in die Warteschlange ein.",
+ "loc.instanceNameFormat": "Jenkins-Auftrag in Warteschlange einreihen: $(jobName)",
+ "loc.group.displayName.advanced": "Erweitert",
+ "loc.input.label.serverEndpoint": "Jenkins-Dienstverbindung",
+ "loc.input.help.serverEndpoint": "Wählen Sie die Dienstverbindung für Ihre Jenkins-Instanz aus. Wenn Sie eine Dienstverbindung erstellen möchten, klicken Sie auf den Link \"Verwalten\", und erstellen Sie eine neue Jenkins-Dienstverbindung.",
+ "loc.input.label.jobName": "Auftragsname",
+ "loc.input.help.jobName": "Der Name des Jenkins-Auftrags, der in die Warteschlange eingereiht werden soll. Dieser Name muss genau mit dem Auftragsnamen auf dem Jenkins-Server übereinstimmen.",
+ "loc.input.label.isMultibranchJob": "Der Auftrag weist den Typ \"Multibranch Pipeline\" auf.",
+ "loc.input.help.isMultibranchJob": "Dieser Auftrag weist den Typ \"Multibranch Pipeline\" auf. Wenn dies ausgewählt ist, geben Sie den entsprechenden Branchnamen ein. Hierfür ist das Team Foundation Server-Plugin für Jenkins v5.3.4 oder höher erforderlich.",
+ "loc.input.label.multibranchPipelineBranch": "Multibranch Pipeline-Branch",
+ "loc.input.help.multibranchPipelineBranch": "Fügen Sie diesen Multibranch Pipeline-Auftrag für den angegebenen Branch in eine Warteschlange ein. Hierfür ist das Team Foundation Server-Plugin für Jenkins v5.3.4 oder höher erforderlich.",
+ "loc.input.label.captureConsole": "Konsolenausgabe erfassen und auf den Abschluss warten",
+ "loc.input.help.captureConsole": "Sofern ausgewählt, wird in dieser Aufgabe die Konsolenausgabe des Jenkins-Builds erfasst, auf den Abschluss des Jenkins-Builds gewartet und dann auf der Grundlage des Ergebnisses des Jenkins-Builds die erfolgreiche Ausführung bzw. ein Fehler gemeldet. Andernfalls wird diese Aufgabe nach dem erfolgreichen Einreihen des Jenkins-Auftrags in die Warteschlange erfolgreich abgeschlossen, ohne auf die Ausführung des Jenkins-Builds zu warten.",
+ "loc.input.label.capturePipeline": "Pipelineausgabe erfassen und auf den Abschluss der Pipeline warten",
+ "loc.input.help.capturePipeline": "Sofern ausgewählt, wird in dieser Aufgabe die vollständige Pipelinekonsolenausgabe des Jenkins-Builds erfasst, auf den Abschluss der gesamten Jenkins-Buildpipeline gewartet und dann auf der Grundlage des Ergebnisses der Jenkins-Buildpipeline die erfolgreiche Ausführung bzw. ein Fehler gemeldet. Andernfalls wird diese Aufgabe nach Abschluss des ersten Jenkins-Auftrags erfolgreich abgeschlossen, ohne auf die Ausführung der gesamten Jenkins-Buildpipeline zu warten.",
+ "loc.input.label.parameterizedJob": "Parametrisierter Auftrag",
+ "loc.input.help.parameterizedJob": "Wählen Sie aus, ob der Jenkins-Auftrag Parameter akzeptiert. Diese Option sollte selbst dann ausgewählt werden, wenn nur Standardparameterwerte verwendet werden und tatsächlich keine Parameterangabe erfolgt.",
+ "loc.input.label.jobParameters": "Auftragsparameter",
+ "loc.input.help.jobParameters": "Geben Sie Auftragsparameter (ein Parameter pro Zeile) im Format = an.Wenn Sie einen Parameter auf einen leeren Wert festlegen möchten (dies ist zum Überschreiben eines Standardwerts sinnvoll), lassen Sie den Parameterwert aus. Beispiel: = .
Variablen werden unterstützt, z. B. zum Definieren des Parameters commitId als Git-Commit-ID für den Build. Verwenden Sie zu diesem Zweck die folgende Syntax: commitId=$(Build.SourceVersion) . Weitere Informationen finden Sie in der [Dokumentation zu Variablen]](https://go.microsoft.com/fwlink/?linkid=875288).
Die folgenden Jenkins-Parametertypen werden unterstützt:
\"Boolean\" \"Choice\" \"Password\" \"String\" ",
+ "loc.input.label.failOnUnstableResult": "Fehler bei instabilem Ergebnis",
+ "loc.input.help.failOnUnstableResult": "Gibt die Strenge einer Erfolgsdefinition an: Ob instabil als Fehler betrachtet werden soll oder nicht. \"False\" für nicht strenge und \"true\" für strenge Version.",
+ "loc.input.label.retryCount": "Anzahl der Wiederholungsversuchen bei Verbindungsfehlern",
+ "loc.input.help.retryCount": "Anzahl der Wiederholungsversuche beim Auftreten von Fehlern angeben",
+ "loc.input.label.delayBetweenRetries": "Zeitraum zwischen Wiederholungen",
+ "loc.input.help.delayBetweenRetries": "Geben Sie den Zeitraum zwischen den Wiederholungen an. Diese Angabe erfolgt in Sekunden",
+ "loc.messages.FailedToGenerateSummary": "Fehler beim Erstellen einer Buildzusammenfassung.",
+ "loc.messages.succeeded": "Erfolgreich",
+ "loc.messages.unstable": "instabil",
+ "loc.messages.failed": "Fehlerhaft",
+ "loc.messages.notbuilt": "Nicht erstellt",
+ "loc.messages.aborted": "abgebrochen",
+ "loc.messages.unknown": "Unbekannt",
+ "loc.messages.console": "Konsole",
+ "loc.messages.JenkinsPipelineComplete": "Jenkins-Pipeline abgeschlossen",
+ "loc.messages.JenkinsJobComplete": "Jenkins-Auftrag abgeschlossen",
+ "loc.messages.JenkinsJobQueued": "Jenkins-Auftrag in Warteschlange eingereiht",
+ "loc.messages.JenkinsPipelineFailed": "Fehler bei der Jenkins-Pipeline.",
+ "loc.messages.JenkinsJobFailed": "Fehler beim Jenkins-Auftrag.",
+ "loc.messages.JenkinsJobFailedtoQueue": "Fehler beim Einfügen des Jenkins-Auftrags in eine Warteschlange.",
+ "loc.messages.JenkinsJobQueueUriInvalid": "Der von Jenkins zurückgegebene URI der Auftragswarteschlange ist nicht erreichbar (%s). Überprüfen Sie, ob die Jenkins-URL auf Ihrem Jenkins-server unter \"Jenkins verwalten\" > \"System konfigurieren\" ordnungsgemäß konfiguriert ist. Fehlerdetails: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/en-US/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/en-US/resources.resjson
new file mode 100644
index 000000000000..206dbe37ea62
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/en-US/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Jenkins queue job",
+ "loc.helpMarkDown": "[Learn more about this task](http://go.microsoft.com/fwlink/?LinkId=816956). This task queues a job on a [Jenkins](https://jenkins.io/) server. Full integration capabilities require installation of the [Team Foundation Server Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin) on Jenkins.",
+ "loc.description": "Queue a job on a Jenkins server",
+ "loc.instanceNameFormat": "Queue Jenkins job: $(jobName)",
+ "loc.group.displayName.advanced": "Advanced",
+ "loc.input.label.serverEndpoint": "Jenkins service connection",
+ "loc.input.help.serverEndpoint": "Select the service connection for your Jenkins instance. To create one, click the Manage link and create a new Jenkins service connection.",
+ "loc.input.label.jobName": "Job name",
+ "loc.input.help.jobName": "The name of the Jenkins job to queue. This must exactly match the job name on the Jenkins server.",
+ "loc.input.label.isMultibranchJob": "Job is of multibranch pipeline type",
+ "loc.input.help.isMultibranchJob": "This job is of multibranch pipeline type. If selected, enter the appropriate branch name. Requires Team Foundation Server Plugin for Jenkins v5.3.4 or later.",
+ "loc.input.label.multibranchPipelineBranch": "Multibranch pipeline branch",
+ "loc.input.help.multibranchPipelineBranch": "Queue this multibranch pipeline job on the specified branch. This requires Team Foundation Server Plugin for Jenkins v5.3.4 or later.",
+ "loc.input.label.captureConsole": "Capture console output and wait for completion",
+ "loc.input.help.captureConsole": "If selected, this task will capture the Jenkins build console output, wait for the Jenkins build to complete, and succeed/fail based on the Jenkins build result. Otherwise, once the Jenkins job is successfully queued, this task will successfully complete without waiting for the Jenkins build to run.",
+ "loc.input.label.capturePipeline": "Capture pipeline output and wait for pipeline completion",
+ "loc.input.help.capturePipeline": "If selected, this task will capture the full Jenkins build pipeline console output, wait for the full Jenkins build pipeline to complete, and succeed/fail based on the Jenkins build pipeline result. Otherwise, once the first Jenkins job completes, this task will successfully complete without waiting for full Jenkins build pipeline to run.",
+ "loc.input.label.parameterizedJob": "Parameterized job",
+ "loc.input.help.parameterizedJob": "Select if the Jenkins job accepts parameters. This should be selected even if all default parameter values are used and no parameters are actually specified.",
+ "loc.input.label.jobParameters": "Job parameters",
+ "loc.input.help.jobParameters": "Specify job parameters, one per line, in the form `=` To set a parameter to an empty value (useful for overriding a default value), leave off the parameter value. For example, specify `=`
Variables are supported. For example, to set a `commitId` parameter value to the Git commit ID of the build, use: `commitId=$(Build.SourceVersion)` . See the [documentation on variables](https://go.microsoft.com/fwlink/?linkid=875288) for more details.
Supported Jenkins parameter types are:
`Boolean` `Choice` `Password` `String` ",
+ "loc.input.label.failOnUnstableResult": "Fail on unstable result",
+ "loc.input.help.failOnUnstableResult": "Specifies strictness of a success definition: whether to consider unstable as a failure or not. False for non-strict, and true for strict version.",
+ "loc.input.label.retryCount": "Number of retries for failed connection",
+ "loc.input.help.retryCount": "Specify number of retries on errors or failures",
+ "loc.input.label.delayBetweenRetries": "Time between retries",
+ "loc.input.help.delayBetweenRetries": "Specify time between retries. This is specified in seconds",
+ "loc.messages.FailedToGenerateSummary": "Failed to generate build summary.",
+ "loc.messages.succeeded": "succeeded",
+ "loc.messages.unstable": "unstable",
+ "loc.messages.failed": "failed",
+ "loc.messages.notbuilt": "not built",
+ "loc.messages.aborted": "aborted",
+ "loc.messages.unknown": "unknown",
+ "loc.messages.console": "console",
+ "loc.messages.JenkinsPipelineComplete": "Jenkins pipeline complete",
+ "loc.messages.JenkinsJobComplete": "Jenkins job complete",
+ "loc.messages.JenkinsJobQueued": "Jenkins job queued",
+ "loc.messages.JenkinsPipelineFailed": "Jenkins pipeline failed",
+ "loc.messages.JenkinsJobFailed": "Jenkins job failed",
+ "loc.messages.JenkinsJobFailedtoQueue": "Jenkins job failed to queue",
+ "loc.messages.JenkinsJobQueueUriInvalid": "The URI of the job queue returned by Jenkins could not be reached (%s). Verify the 'Jenkins URL' is configured correctly on your Jenkins server under `Manage Jenkins`, `Configure System`. Error details: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/es-ES/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/es-ES/resources.resjson
new file mode 100644
index 000000000000..a7c41310dd71
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/es-ES/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Poner en cola un trabajo en un servidor de Jenkins",
+ "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](http://go.microsoft.com/fwlink/?LinkId=816956). Esta tarea pone en cola un trabajo en un servidor de [Jenkins](https://jenkins.io/). Para la funcionalidad de integración completa, es necesario instalar el [complemento de Team Foundation Server](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin) en Jenkins.",
+ "loc.description": "Pone en cola un trabajo en un servidor de Jenkins",
+ "loc.instanceNameFormat": "Poner en cola el trabajo de Jenkins: $(jobName)",
+ "loc.group.displayName.advanced": "Avanzado",
+ "loc.input.label.serverEndpoint": "Conexión de servicio de Jenkins",
+ "loc.input.help.serverEndpoint": "Seleccione la conexión de servicio para la instancia de Jenkins. Para crear una, haga clic en el vínculo Administrar y cree una conexión de servicio de Jenkins.",
+ "loc.input.label.jobName": "Nombre del trabajo",
+ "loc.input.help.jobName": "Nombre del trabajo de Jenkins que se debe poner en cola. Debe coincidir exactamente con el nombre del trabajo del servidor de Jenkins.",
+ "loc.input.label.isMultibranchJob": "El trabajo es de tipo de canalización de múltiples ramas",
+ "loc.input.help.isMultibranchJob": "Este trabajo es de tipo de canalización de múltiples ramas. Si lo selecciona, escriba el nombre de rama correspondiente. Requiere el complemento de Team Foundation Server para Jenkins v5.3.4 o versiones posteriores.",
+ "loc.input.label.multibranchPipelineBranch": "Rama de canalización de múltiples ramas",
+ "loc.input.help.multibranchPipelineBranch": "Ponga en cola este trabajo de canalización de múltiples ramas en la rama especificada. Esto requiere el complemento de Team Foundation Server para Jenkins v5.3.4 o posterior.",
+ "loc.input.label.captureConsole": "Capturar la salida de la consola y esperar a que finalice",
+ "loc.input.help.captureConsole": "Cuando se selecciona, esta tarea captura la salida de la consola de compilación de Jenkins, espera a que se complete dicha compilación y acaba correctamente o da error en función del resultado de la compilación de Jenkins. De lo contrario, una vez que el trabajo de Jenkins se ha puesto correctamente en cola, esta tarea finaliza correctamente sin esperar a que se ejecute la compilación de Jenkins.",
+ "loc.input.label.capturePipeline": "Capturar la salida de la canalización y esperar a que esta finalice",
+ "loc.input.help.capturePipeline": "Cuando se selecciona, esta tarea captura la salida de la consola de la canalización completa de la compilación de Jenkins, espera a que se complete dicha canalización y acaba correctamente o da error en función del resultado de la canalización de compilación de Jenkins. De lo contrario, una vez que se completa el primer trabajo de Jenkins, esta tarea finaliza correctamente sin esperar a que se ejecute la canalización completa de la compilación de Jenkins.",
+ "loc.input.label.parameterizedJob": "Trabajo parametrizado",
+ "loc.input.help.parameterizedJob": "Seleccione si el trabajo de Jenkins acepta parámetros. Debe seleccionarse incluso cuando se usan todos los valores de parámetros predeterminados y no se especifican parámetros realmente.",
+ "loc.input.label.jobParameters": "Parámetros del trabajo",
+ "loc.input.help.jobParameters": "Especifique los parámetros del trabajo, uno por línea, con el formato \"=\" Para establecer un parámetro en un valor vacío (útil cuando se quiere invalidar el valor predeterminado), no incluya el valor del parámetro. Por ejemplo, especifique \"=\"
Se admiten variables. Por ejemplo, para establecer el valor del parámetro \"commitId\" en \"git commit ID\" para la compilación, use: \"commitId=$(Build.SourceVersion)\" . Consulte la [documentación sobre variables](https://go.microsoft.com/fwlink/?linkid=875288) para obtener más detalles.
Los tipos de parámetros de Jenkins admitidos son:
\"Boolean\" \"Choice\" \"Password\" \"String\" ",
+ "loc.input.label.failOnUnstableResult": "Error al producir un resultado inestable",
+ "loc.input.help.failOnUnstableResult": "Especifica la rigurosidad de una definición correcta: si inestable se debe considerar como un error o no. False para no estricto y true para la versión estricta.",
+ "loc.input.label.retryCount": "Número de reintentos de conexión incorrectos",
+ "loc.input.help.retryCount": "Especifique el número de reintentos tras errores",
+ "loc.input.label.delayBetweenRetries": "Tiempo entre reintentos",
+ "loc.input.help.delayBetweenRetries": "Especifique el tiempo entre reintentos. Se especifica en segundos",
+ "loc.messages.FailedToGenerateSummary": "No se pudo generar el resumen de compilación.",
+ "loc.messages.succeeded": "se realizó correctamente",
+ "loc.messages.unstable": "inestable",
+ "loc.messages.failed": "error",
+ "loc.messages.notbuilt": "sin compilar",
+ "loc.messages.aborted": "anulada",
+ "loc.messages.unknown": "desconocido",
+ "loc.messages.console": "consola",
+ "loc.messages.JenkinsPipelineComplete": "Canalización de Jenkins finalizada",
+ "loc.messages.JenkinsJobComplete": "Trabajo de Jenkins finalizado",
+ "loc.messages.JenkinsJobQueued": "El trabajo de Jenkins se puso en cola",
+ "loc.messages.JenkinsPipelineFailed": "No se pudo ejecutar la canalización de Jenkins",
+ "loc.messages.JenkinsJobFailed": "No se pudo ejecutar el trabajo de Jenkins",
+ "loc.messages.JenkinsJobFailedtoQueue": "No se pudo poner en cola el trabajo de Jenkins",
+ "loc.messages.JenkinsJobQueueUriInvalid": "No se pudo acceder al URI de la cola de trabajos que devolvió Jenkins (%s). Compruebe que \"Jenkins URL\" se ha configurado correctamente en el servidor de Jenkins bajo \"Manage Jenkins\", \"Configure System\". Detalles del error: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/fr-FR/resources.resjson
new file mode 100644
index 000000000000..47b90b411617
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/fr-FR/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Mettre en file d'attente un travail Jenkins",
+ "loc.helpMarkDown": "[En savoir plus sur cette tâche](http://go.microsoft.com/fwlink/?LinkId=816956). Cette tâche permet de mettre en file d'attente un travail sur un serveur [Jenkins](https://jenkins.io/). L'accès à des fonctionnalités d'intégration complètes nécessite l'installation du [Plug-in Team Foundation Server](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin) sur Jenkins.",
+ "loc.description": "Mise en file d'attente d'un travail sur un serveur Jenkins",
+ "loc.instanceNameFormat": "Mettre en file d'attente le travail Jenkins : $(jobName)",
+ "loc.group.displayName.advanced": "Avancé",
+ "loc.input.label.serverEndpoint": "Connexion de service Jenkins",
+ "loc.input.help.serverEndpoint": "Sélectionnez la connexion de service de votre instance Jenkins. Pour en créer une, cliquez sur le lien Gérer, puis créez une connexion de service Jenkins.",
+ "loc.input.label.jobName": "Nom du travail",
+ "loc.input.help.jobName": "Nom du travail Jenkins à mettre en file d'attente. Il doit correspondre exactement au nom du travail sur le serveur Jenkins.",
+ "loc.input.label.isMultibranchJob": "Le travail est de type pipeline multibranche",
+ "loc.input.help.isMultibranchJob": "Ce travail est de type pipeline multibranche. Si vous le sélectionnez, entrez le nom de branche approprié. Nécessite le plug-in Team Foundation Server pour Jenkins v5.3.4 ou version ultérieure.",
+ "loc.input.label.multibranchPipelineBranch": "Branche de pipeline multibranche",
+ "loc.input.help.multibranchPipelineBranch": "Mettez en file d'attente ce travail de pipeline multibranche dans la branche spécifiée. Vous devez disposer du plug-in Team Foundation Server pour Jenkins v5.3.4 ou version ultérieure.",
+ "loc.input.label.captureConsole": "Capturer la sortie de console et attendre la fin de l'exécution",
+ "loc.input.help.captureConsole": "Si cette tâche est sélectionnée, elle capture la sortie de console de la build Jenkins, attend la fin de l'exécution de la build Jenkins, puis s'achève par un succès/échec en fonction du résultat de la build Jenkins. Sinon, une fois le travail Jenkins placé correctement en file d'attente, cette tâche se déroule correctement sans attendre l'exécution de la build Jenkins.",
+ "loc.input.label.capturePipeline": "Capturer la sortie de pipeline et attendre la fin de l'exécution du pipeline",
+ "loc.input.help.capturePipeline": "Si cette tâche est sélectionnée, elle capture la sortie de console de l'intégralité du pipeline de build Jenkins, attend la fin de l'exécution de l'intégralité du pipeline de build Jenkins, puis s'achève par un succès/échec en fonction du résultat de la build Jenkins. Sinon, une fois le premier travail Jenkins effectué, cette tâche se déroule correctement sans attendre l'exécution de l'intégralité du pipeline de build Jenkins.",
+ "loc.input.label.parameterizedJob": "Travail paramétrable",
+ "loc.input.help.parameterizedJob": "Sélectionnez cette option si le travail Jenkins accepte les paramètres. Effectuez ce choix, même si toutes les valeurs des paramètres par défaut sont utilisées, et qu'aucun paramètre n'est réellement spécifié.",
+ "loc.input.label.jobParameters": "Paramètres du travail",
+ "loc.input.help.jobParameters": "Spécifiez les paramètres du travail, ligne par ligne, sous la forme '=' Pour affecter une valeur vide à un paramètre (utile pour remplacer une valeur par défaut), ne touchez pas à la valeur du paramètre. Par exemple, spécifiez '='
Les variables sont prises en charge. Par exemple, pour affecter un ID de validation Git à la valeur de paramètre 'commitId' de la build, indiquez : 'commitId=$(Build.SourceVersion)' . Pour plus d'informations, consultez la [documentation sur les variables](https://go.microsoft.com/fwlink/?linkid=875288).
Les types de paramètre Jenkins pris en charge sont les suivants :
'Booléen' 'Choix' 'Mot de passe' 'Chaîne' ",
+ "loc.input.label.failOnUnstableResult": "Échec en cas de résultat instable",
+ "loc.input.help.failOnUnstableResult": "Spécifie la rigueur de la définition de réussite : si l'on doit considérer l'instabilité comme un échec ou non. Faux pour la version non stricte, et vrai pour la version stricte.",
+ "loc.input.label.retryCount": "Nombre de tentatives en cas d'échec de connexion",
+ "loc.input.help.retryCount": "Spécifier le nombre de tentatives en cas d’erreur ou d’échec",
+ "loc.input.label.delayBetweenRetries": "Délai entre les nouvelles tentatives",
+ "loc.input.help.delayBetweenRetries": "Spécifier le temps entre les nouvelles tentatives. Cette valeur est spécifiée en secondes",
+ "loc.messages.FailedToGenerateSummary": "Échec de génération du résumé de la build.",
+ "loc.messages.succeeded": "opération réussie",
+ "loc.messages.unstable": "instable",
+ "loc.messages.failed": "échec",
+ "loc.messages.notbuilt": "non généré",
+ "loc.messages.aborted": "abandonné",
+ "loc.messages.unknown": "inconnu",
+ "loc.messages.console": "console",
+ "loc.messages.JenkinsPipelineComplete": "Pipeline Jenkins exécuté",
+ "loc.messages.JenkinsJobComplete": "Travail Jenkins exécuté",
+ "loc.messages.JenkinsJobQueued": "Travail Jenkins mis en file d'attente",
+ "loc.messages.JenkinsPipelineFailed": "Échec du pipeline Jenkins",
+ "loc.messages.JenkinsJobFailed": "Échec du travail Jenkins",
+ "loc.messages.JenkinsJobFailedtoQueue": "Échec de la mise en file d'attente du travail Jenkins",
+ "loc.messages.JenkinsJobQueueUriInvalid": "L'URI de la file d'attente des travaux retournée par Jenkins est inaccessible (%s). Vérifiez qu'il existe une 'URL Jenkins' correctement configurée sur votre serveur Jenkins sous 'Gérer Jenkins', 'Configurer le système'. Détails de l'erreur : %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/it-IT/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/it-IT/resources.resjson
new file mode 100644
index 000000000000..3b2cf45e8ded
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/it-IT/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Accoda il processo nel server Jenkins",
+ "loc.helpMarkDown": "[Altre informazioni su questa attività](http://go.microsoft.com/fwlink/?LinkId=816956). Questa attività accoda un processo nel server [Jenkins](https://jenkins.io/). Per le funzionalità complete di integrazione è necessario installare il [plug-in Team Foundation Server](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin) in Jenkins.",
+ "loc.description": "Accoda un processo in un server Jenkins",
+ "loc.instanceNameFormat": "Accoda processo Jenkins: $(jobName)",
+ "loc.group.displayName.advanced": "Avanzate",
+ "loc.input.label.serverEndpoint": "Connessione al servizio Jenkins",
+ "loc.input.help.serverEndpoint": "Consente di selezionare la connessione al servizio per l'istanza di Jenkins. Per crearne una, fare clic sul collegamento Gestisci e creare una nuova connessione al servizio Jenkins.",
+ "loc.input.label.jobName": "Nome del processo",
+ "loc.input.help.jobName": "Nome del processo Jenkins da accodare. Deve corrispondere esattamente al nome del processo nel server Jenkins.",
+ "loc.input.label.isMultibranchJob": "Processo di tipo pipeline a più rami",
+ "loc.input.help.isMultibranchJob": "Questo processo è di tipo pipeline a più rami. Se questa opzione è selezionata, immettere il nome appropriato del ramo. Richiede il plug-in di Team Foundation Server per Jenkins 5.3.4 o versione successiva.",
+ "loc.input.label.multibranchPipelineBranch": "Ramo di pipeline a più rami",
+ "loc.input.help.multibranchPipelineBranch": "Accoda questo processo di tipo pipeline a più rami nel ramo specificato. Richiede il plug-in di Team Foundation Server per Jenkins 5.3.4 o versione successiva.",
+ "loc.input.label.captureConsole": "Acquisisci l'output della console e attendi il completamento",
+ "loc.input.help.captureConsole": "Se l'opzione è selezionata, questa attività acquisirà l'output della console di compilazione Jenkins, attenderà il completamento della compilazione Jenkins e riuscirà/non riuscirà a seconda del risultato della compilazione. In caso contrario, dopo l'accodamento del processo Jenkins, questa attività verrà completata senza attendere l'esecuzione della compilazione Jenkins.",
+ "loc.input.label.capturePipeline": "Acquisisci l'output della pipeline e attendi il completamento della pipeline",
+ "loc.input.help.capturePipeline": "Se l'opzione è selezionata, questa attività acquisirà l'output della console della pipeline completa di compilazione Jenkins, attenderà il completamento della pipeline completa di compilazione Jenkins e riuscirà/non riuscirà a seconda del risultato della compilazione. In caso contrario, dopo il completamento del primo processo Jenkins, questa attività verrà completata senza attendere l'esecuzione della pipeline completa di compilazione Jenkins.",
+ "loc.input.label.parameterizedJob": "Processo con parametri",
+ "loc.input.help.parameterizedJob": "Selezionare questa opzione se il processo Jenkins accetta parametri. È necessario selezionarla anche si usano tutti i valori di parametro predefiniti e non viene effettivamente specificato alcun parametro.",
+ "loc.input.label.jobParameters": "Parametri del processo",
+ "loc.input.help.jobParameters": "Consente di specificare i parametri del processo, uno per riga, nel formato `=` Per impostare un parametro su un valore vuoto (utile per la sostituzione di un valore predefinito), non indicare il valore del parametro. Ad esempio specificare `=`
Le variabili sono supportate. Ad esempio, per impostare il valore del parametro `commitId` sull'ID commit GIT della compilazione, usare `commitId=$(Build.SourceVersion)` . Per maggiori dettagli, vedere la [documentazione sulle variabili](https://go.microsoft.com/fwlink/?linkid=875288).
I tipi di parametro Jenkins supportati sono:
`Boolean` `Choice` `Password` `String` ",
+ "loc.input.label.failOnUnstableResult": "Errore su risultato non stabile",
+ "loc.input.help.failOnUnstableResult": "Specifica la severità di una definizione di esito positivo: indica se considerarla instabile come un errore o meno. False per le versioni non strict e true per le versioni strict.",
+ "loc.input.label.retryCount": "Numero di tentativi per la connessione non riuscita",
+ "loc.input.help.retryCount": "Specificare il numero di tentativi in caso di errori o operazioni non riuscite",
+ "loc.input.label.delayBetweenRetries": "Tempo tra i tentativi",
+ "loc.input.help.delayBetweenRetries": "Specificare il tempo tra i tentativi. Specificato in secondi",
+ "loc.messages.FailedToGenerateSummary": "Non è stato possibile generare il riepilogo della compilazione.",
+ "loc.messages.succeeded": "riuscita",
+ "loc.messages.unstable": "instabile",
+ "loc.messages.failed": "non riuscita",
+ "loc.messages.notbuilt": "non compilata",
+ "loc.messages.aborted": "interrotto",
+ "loc.messages.unknown": "sconosciuta",
+ "loc.messages.console": "console",
+ "loc.messages.JenkinsPipelineComplete": "Pipeline Jenkins completata",
+ "loc.messages.JenkinsJobComplete": "Processo Jenkins completato",
+ "loc.messages.JenkinsJobQueued": "Processo Jenkins accodato",
+ "loc.messages.JenkinsPipelineFailed": "Pipeline Jenkins non riuscita",
+ "loc.messages.JenkinsJobFailed": "Processo Jenkins non riuscito",
+ "loc.messages.JenkinsJobFailedtoQueue": "Processo Jenkins non accodato",
+ "loc.messages.JenkinsJobQueueUriInvalid": "Non è stato possibile raggiungere l'URI della coda processi restituito da Jenkins (%s). Verificare che l'opzione 'URL di Jenkins' sia configurata correttamente nel server Jenkins in `Gestisci Jenkins`, `Configura sistema`. Dettagli errore: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ja-JP/resources.resjson
new file mode 100644
index 000000000000..549c82520286
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ja-JP/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Jenkins キュー ジョブ",
+ "loc.helpMarkDown": "[このタスクの詳細を表示します](http://go.microsoft.com/fwlink/?LinkId=816956)。このタスクでは、[Jenkins](https://jenkins.io/) サーバー上のジョブをキューに登録します。完全な統合機能には、Jenkins で [Team Foundation Server プラグイン](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin)をインストールすることが必要です。",
+ "loc.description": "Jenkins サーバー上でジョブをキューに入れます",
+ "loc.instanceNameFormat": "Jenkins ジョブ: $(jobName) をキューに入れる",
+ "loc.group.displayName.advanced": "詳細設定",
+ "loc.input.label.serverEndpoint": "Jenkins サービス接続",
+ "loc.input.help.serverEndpoint": "Jenkins インスタンスのサービス接続を選択します。それを作成するには、[管理] リンクをクリックして、新しい Jenkins サービス接続を作成します。",
+ "loc.input.label.jobName": "ジョブ名",
+ "loc.input.help.jobName": "キューに入れる Jenkins ジョブの名前。これは Jenkins サーバー上のジョブ名と完全に一致する必要があります。",
+ "loc.input.label.isMultibranchJob": "ジョブの種類は multibranch pipeline です",
+ "loc.input.help.isMultibranchJob": "このジョブの種類は multibranch pipeline です。選択する場合は適切なブランチ名を入力します。Team Foundation Server Plugin for Jenkins v5.3.4 以降が必要です。",
+ "loc.input.label.multibranchPipelineBranch": "Multibranch pipeline ブランチ",
+ "loc.input.help.multibranchPipelineBranch": "指定のブランチでこの multibranch pipeline ジョブをキューに登録します。Team Foundation Server Plugin for Jenkins v5.3.4 以降が必要です。",
+ "loc.input.label.captureConsole": "コンソール出力を取り込み、完了するのを待ちます",
+ "loc.input.help.captureConsole": "選択した場合、このタスクは、Jenkins ビルドのコンソール出力をキャプチャし、Jenkins ビルドが完了するのを待ち、Jenkins ビルドの結果に基づいて成功/失敗となります。 それ以外の場合、Jenkins ジョブが正常にキューに入ると、このタスクは Jenkins ビルドの実行を待つことなく正常に完了します。",
+ "loc.input.label.capturePipeline": "パイプライン出力を取り込み、パイプラインが完了するのを待ちます",
+ "loc.input.help.capturePipeline": "選択した場合、このタスクは、完全な Jenkins ビルド パイプラインのコンソール出力を取り込み、完全な Jenkins ビルド パイプラインが完了するのを待ち、そして Jenkins ビルド パイプラインの結果に基づいて成功/失敗となります。 選択しない場合は、最初の Jenkins ジョブが完了すると、このタスクは完全な Jenkins ビルド パイプラインの実行を待つことなく正常に完了します。",
+ "loc.input.label.parameterizedJob": "パラメーター化されたジョブ",
+ "loc.input.help.parameterizedJob": "Jenkins ジョブがパラメーターを受け入れる場合に選びます。すべての既定のパラメーター値が使用され、実際に指定されているパラメーターはないという場合であっても、これを選ぶ必要があります。",
+ "loc.input.label.jobParameters": "ジョブ パラメーター",
+ "loc.input.help.jobParameters": "`=` の形式で、1 行につき 1 つのジョブ パラメーターを指定します。パラメーターを空の値に設定するには (既定値を上書きするのに便利です) パラメーター値を省略します。たとえば、`=` と指定します。
変数がサポートされています。たとえば、`commitId` パラメーター値を、ビルドの Git commit ID に設定するには、`commitId=$(Build.SourceVersion)` を使用します。詳細については、[変数に関するドキュメント](https://go.microsoft.com/fwlink/?linkid=875288) を参照してください。
サポートされている Jenkins パラメーターの型は次のとおりです。
`Boolean` `Choice` `Password` `String` ",
+ "loc.input.label.failOnUnstableResult": "不安定な結果での失敗",
+ "loc.input.help.failOnUnstableResult": "成功の定義の厳密性を指定して、不安定を失敗と考慮するかどうかを指定します。厳密でない場合は False、厳密な場合は True です。",
+ "loc.input.label.retryCount": "失敗した接続の再試行回数",
+ "loc.input.help.retryCount": "エラーまたは障害発生時の再試行回数を指定します",
+ "loc.input.label.delayBetweenRetries": "再試行の時間間隔",
+ "loc.input.help.delayBetweenRetries": "再試行の時間間隔を指定します。これは秒単位で指定します",
+ "loc.messages.FailedToGenerateSummary": "ビルドの概要を生成できませんでした。",
+ "loc.messages.succeeded": "成功しました",
+ "loc.messages.unstable": "不安定",
+ "loc.messages.failed": "失敗しました",
+ "loc.messages.notbuilt": "ビルドされていません",
+ "loc.messages.aborted": "中止",
+ "loc.messages.unknown": "不明です",
+ "loc.messages.console": "コンソール",
+ "loc.messages.JenkinsPipelineComplete": "Jenkins パイプライン完了",
+ "loc.messages.JenkinsJobComplete": "Jenkins ジョブ完了",
+ "loc.messages.JenkinsJobQueued": "Jenkins ジョブが処理待ち",
+ "loc.messages.JenkinsPipelineFailed": "Jenkins パイプライン失敗",
+ "loc.messages.JenkinsJobFailed": "Jenkins ジョブの失敗",
+ "loc.messages.JenkinsJobFailedtoQueue": "Jenkins ジョブのキューへの登録失敗",
+ "loc.messages.JenkinsJobQueueUriInvalid": "Jenkins によって返されるジョブ キューの URI に到達できませんでした (%s)。[Jenkins URL] が Jenkins サーバーの [Jenkins の管理]、[システムの設定] で適切に構成されていることをご確認ください。エラーの詳細: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ko-KR/resources.resjson
new file mode 100644
index 000000000000..e08178f4b8a9
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ko-KR/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Jenkins 작업을 큐에 넣기",
+ "loc.helpMarkDown": "[이 작업(task)에 대한 자세한 정보](http://go.microsoft.com/fwlink/?LinkId=816956). 이 작업(task)에서는 [Jenkins](https://jenkins.io/) 서버의 큐에 작업(job)을 넣습니다. 전체 통합 기능을 사용하려면 Jenkins에 [Team Foundation Server 플러그 인](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin)을 설치해야 합니다.",
+ "loc.description": "작업을 Jenkins 서버의 큐에 넣기",
+ "loc.instanceNameFormat": "Jenkins 작업을 큐에 넣기: $(jobName)",
+ "loc.group.displayName.advanced": "고급",
+ "loc.input.label.serverEndpoint": "Jenkins 서비스 연결",
+ "loc.input.help.serverEndpoint": "Jenkins 인스턴스에 대한 서비스 연결을 선택합니다. 서비스 연결을 만들려면 [관리] 링크를 클릭하고 새 Jenkins 서비스 연결을 만듭니다.",
+ "loc.input.label.jobName": "작업 이름",
+ "loc.input.help.jobName": "큐에 넣을 Jenkins 작업의 이름입니다. 이 이름은 Jenkins 서버에 있는 작업 이름과 정확히 일치해야 합니다.",
+ "loc.input.label.isMultibranchJob": "작업이 다중 분기 파이프라인 형식입니다.",
+ "loc.input.help.isMultibranchJob": "이 작업은 다중 분기 파이프라인 형식입니다. 선택한 경우 적절한 분기 이름을 입력하세요. Jenkins v5.3.4 이상의 경우 Team Foundation Server 플러그 인이 필요합니다.",
+ "loc.input.label.multibranchPipelineBranch": "다중 분기 파이프라인 분기",
+ "loc.input.help.multibranchPipelineBranch": "지정된 분기에서 이 다중 분기 파이프라인 작업을 큐에 대기시킵니다. Jenkins v5.3.4 이상의 경우 Team Foundation Server 플러그 인이 필요합니다.",
+ "loc.input.label.captureConsole": "콘솔 출력을 캡처하고 완료되기를 기다립니다.",
+ "loc.input.help.captureConsole": "선택하면, 이 작업에서는 Jenkins 빌드 콘솔 출력을 캡처하고 Jenkins 빌드가 완료되기를 기다린 이후에 Jenkins 빌드 결과에 따라 성공/실패합니다. 선택하지 않으면, Jenkins 작업을 큐에 넣은 후 Jenkins 빌드가 실행되기를 기다리지 않고 이 작업이 완료됩니다.",
+ "loc.input.label.capturePipeline": "파이프라인 출력을 캡처하고 파이프라인이 완료되기를 기다립니다.",
+ "loc.input.help.capturePipeline": "선택하면, 이 작업에서는 전체 Jenkins 빌드 파이프라인 콘솔 출력을 캡처하고 전체 Jenkins 빌드 파이프라인이 완료되기를 기다린 이후에 Jenkins 빌드 파이프라인 결과에 따라 성공/실패합니다. 선택하지 않으면, 첫 번째 Jenkins 작업이 완료된 후 전체 Jenkins 빌드 파이프라인이 실행되기를 기다리지 않고 이 작업이 완료됩니다.",
+ "loc.input.label.parameterizedJob": "매개 변수가 있는 작업",
+ "loc.input.help.parameterizedJob": "Jenkins 작업이 매개 변수를 허용하는 경우 선택합니다. 모든 기본 매개 변수 값이 사용되고 실제로 매개 변수가 지정되지 않는 경우에도 이 옵션을 선택해야 합니다.",
+ "loc.input.label.jobParameters": "작업 매개 변수",
+ "loc.input.help.jobParameters": "한 줄에 하나씩 '=' 의 형식으로 작업 매개 변수를 지정합니다.매개 변수를 빈 값으로 설정하려면(기본값을 재정의하는 데 유용함) 매개 변수 값을 뺍니다. 예를 들어 '=' 를 지정합니다.
변수가 지원됩니다. 예를 들어 빌드에 대한 'commitId' 매개 변수 값을 빌드의 Git commit ID로 설정하려면 'commitId=$(Build.SourceVersion)' 을(를) 사용합니다. 자세한 내용은 [변수에 관한 설명서](https://go.microsoft.com/fwlink/?linkid=875288)를 참조하세요.
지원되는 Jenkins 매개 변수 형식은 다음과 같습니다.
'Boolean' 'Choice' 'Password' 'String' ",
+ "loc.input.label.failOnUnstableResult": "불안정한 결과에 실패",
+ "loc.input.help.failOnUnstableResult": "성공 정의의 엄격함을 지정합니다: 불안정한 것을 실패로 간주할지 여부. non-strict의 경우 False이고 엄격한 버전의 경우 true입니다.",
+ "loc.input.label.retryCount": "실패한 연결에 대한 재시도 횟수",
+ "loc.input.help.retryCount": "오류 또는 오류에 대한 재시도 횟수 지정",
+ "loc.input.label.delayBetweenRetries": "재시도 사이의 시간",
+ "loc.input.help.delayBetweenRetries": "재시도 간격을 지정합니다. 이 값은 초 단위로 지정됩니다.",
+ "loc.messages.FailedToGenerateSummary": "빌드 요약을 생성하지 못했습니다.",
+ "loc.messages.succeeded": "성공",
+ "loc.messages.unstable": "불안정",
+ "loc.messages.failed": "실패",
+ "loc.messages.notbuilt": "빌드되지 않음",
+ "loc.messages.aborted": "중단됨",
+ "loc.messages.unknown": "알 수 없음",
+ "loc.messages.console": "콘솔",
+ "loc.messages.JenkinsPipelineComplete": "Jenkins 파이프라인 완료",
+ "loc.messages.JenkinsJobComplete": "Jenkins 작업 완료",
+ "loc.messages.JenkinsJobQueued": "Jenkins 작업이 큐에 있습니다.",
+ "loc.messages.JenkinsPipelineFailed": "Jenkins 파이프라인 실패",
+ "loc.messages.JenkinsJobFailed": "Jenkins 작업 실패",
+ "loc.messages.JenkinsJobFailedtoQueue": "Jenkins 작업 큐 대기 실패",
+ "loc.messages.JenkinsJobQueueUriInvalid": "Jenkins에서 반환된 작업 큐의 URI에 연결할 수 없습니다(%s). Jenkins 서버의 'Jenkins 관리', '시스템 구성' 아래에서 'Jenkins URL'이 제대로 구성되었는지 확인하세요. 오류 정보: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ru-RU/resources.resjson
new file mode 100644
index 000000000000..c44285d26c34
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/ru-RU/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Задание в очереди Jenkins",
+ "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](http://go.microsoft.com/fwlink/?LinkId=816956). Эта задача помещает задание в очередь на сервере [Jenkins](https://jenkins.io/). Для полной интеграции необходимо установить [подключаемый модуль Team Foundation Server](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin) на сервере Jenkins.",
+ "loc.description": "Поставить задание в очередь на сервере Jenkins",
+ "loc.instanceNameFormat": "Поместить задание Jenkins в очередь: $(jobName)",
+ "loc.group.displayName.advanced": "Дополнительно",
+ "loc.input.label.serverEndpoint": "Подключение к службе Jenkins",
+ "loc.input.help.serverEndpoint": "Выберите подключение службы для экземпляра Jenkins. Чтобы создать подключение, щелкните ссылку \"Управление\" и создайте подключение службы Jenkins.",
+ "loc.input.label.jobName": "Имя задания",
+ "loc.input.help.jobName": "Имя задания Jenkins, помещаемого в очередь. Имя должно точно соответствовать имени задания на сервере Jenkins.",
+ "loc.input.label.isMultibranchJob": "Задание имеет тип \"Конвейер с многократным ветвлением\"",
+ "loc.input.help.isMultibranchJob": "Это задание имеет тип \"Конвейер с многократным ветвлением\". При выборе этого параметра введите соответствующее имя ветви. Требуется подключаемый модуль Team Foundation Server для Jenkins версии 5.3.4 или более поздней.",
+ "loc.input.label.multibranchPipelineBranch": "Ветвь конвейера с многократным ветвлением",
+ "loc.input.help.multibranchPipelineBranch": "Поместите это задание типа \"Конвейер с многократным ветвлением\" в указанную ветвь. Требуется подключаемый модуль Team Foundation Server для Jenkins версии 5.3.4 или более поздней.",
+ "loc.input.label.captureConsole": "Записывать выходные данные консоли и дожидаться выполнения",
+ "loc.input.help.captureConsole": "Если этот флажок установлен, эта задача будет записывать выходные данные консоли сборки Jenkins, дожидаться выполнения сборки Jenkins и завершаться успешно или с ошибкой в зависимости от результатов сборки Jenkins. В противном случае после успешного помещения задания Jenkins в очередь эта задача будет завершаться успешно, не дожидаясь выполнения сборки Jenkins.",
+ "loc.input.label.capturePipeline": "Записывать выходные данные конвейера и дожидаться выполнения конвейера",
+ "loc.input.help.capturePipeline": "Если этот флажок установлен, эта задача будет записывать выходные данные консоли полного конвейера сборки Jenkins, дожидаться выполнения полного конвейера сборки Jenkins и завершаться успешно или с ошибкой в зависимости от результатов конвейера сборки Jenkins. В противном случае после выполнения задания Jenkins эта задача будет завершаться успешно, не дожидаясь выполнения полного конвейера сборки Jenkins.",
+ "loc.input.label.parameterizedJob": "Параметризованное задание",
+ "loc.input.help.parameterizedJob": "Установите этот флажок, если задание Jenkins будет принимать параметры. Этот флажок необходимо установить, даже если для всех параметров используются значения по умолчанию и фактически параметры не указываются.",
+ "loc.input.label.jobParameters": "Параметры задания",
+ "loc.input.help.jobParameters": "Укажите параметры задания (по одному на строку) в формате \"=\" Чтобы задать пустое значение параметра (удобно для переопределения значения по умолчанию), не указывайте значение параметра. Например, введите \"=\"
Поддерживаются переменные. Например, чтобы определить параметр commitId как идентификатор фиксации git для сборки, используйте строку commitId=$(Build.SourceVersion) . Дополнительные сведения см. в [документации по переменным](https://go.microsoft.com/fwlink/?linkid=875288).
Поддерживаются следующие типы параметров Jenkins:
Boolean Choice Password String ",
+ "loc.input.label.failOnUnstableResult": "Сбой при нестабильном результате",
+ "loc.input.help.failOnUnstableResult": "Задает строгость определения успешного выполнения: следует ли считать нестабильный результат сбоем или нет. Значение false, если определение нестрогое, а если строгое — значение true.",
+ "loc.input.label.retryCount": "Количество повторных попыток для подключений со сбоем",
+ "loc.input.help.retryCount": "Укажите число повторных попыток при ошибках или сбоях",
+ "loc.input.label.delayBetweenRetries": "Время между попытками",
+ "loc.input.help.delayBetweenRetries": "Укажите время между попытками в секундах",
+ "loc.messages.FailedToGenerateSummary": "Не удалось создать сводку сборки.",
+ "loc.messages.succeeded": "выполнено",
+ "loc.messages.unstable": "работает неустойчиво",
+ "loc.messages.failed": "сбой",
+ "loc.messages.notbuilt": "не выполнена",
+ "loc.messages.aborted": "прервано",
+ "loc.messages.unknown": "неизвестно",
+ "loc.messages.console": "консоль",
+ "loc.messages.JenkinsPipelineComplete": "Конвейер Jenkins выполнен.",
+ "loc.messages.JenkinsJobComplete": "Задание Jenkins выполнено.",
+ "loc.messages.JenkinsJobQueued": "Задание Jenkins поставлено в очередь.",
+ "loc.messages.JenkinsPipelineFailed": "Сбой конвейера Jenkins",
+ "loc.messages.JenkinsJobFailed": "Сбой выполнения задания Jenkins",
+ "loc.messages.JenkinsJobFailedtoQueue": "Не удалось поместить задание Jenkins в очередь.",
+ "loc.messages.JenkinsJobQueueUriInvalid": "Не удается разрешить URI очереди заданий, который был возвращен из Jenkins (%s). Убедитесь, что URL-адрес Jenkins настроен правильно. Для этого на сервере Jenkins откройте раздел \"Управление Jenkins\", \"Настройка системы\". Сведения об ошибке: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/zh-CN/resources.resjson
new file mode 100644
index 000000000000..c3bfe1c2a1d3
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/zh-CN/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "Jenkins 队列作业",
+ "loc.helpMarkDown": "[详细了解此任务](http://go.microsoft.com/fwlink/?LinkId=816956)。此任务在 [Jenkins](https://jenkins.io/)服务器上排列作业。完全集成功能要求在 Jenkins 上安装 [Team Foundation Server 插件](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin)。",
+ "loc.description": "在 Jenkins 服务器上排列作业",
+ "loc.instanceNameFormat": "排列 Jenkins 作业: $(jobName)",
+ "loc.group.displayName.advanced": "高级",
+ "loc.input.label.serverEndpoint": "Jenkins 服务连接",
+ "loc.input.help.serverEndpoint": "选择 Jenkins 实例的服务连接。若要进行创建,请单击“管理”链接并创建新的 Jenkins 服务连接。",
+ "loc.input.label.jobName": "作业名称",
+ "loc.input.help.jobName": "要从排队的 Jenkins 作业的名称。此名称必须与 Jenkins 服务器上的作业名称完全匹配。",
+ "loc.input.label.isMultibranchJob": "作业属于多分支管道类型",
+ "loc.input.help.isMultibranchJob": "此作业属于多分支管道类型。如果选择此项,请输入相应的分支名称。Jenkins v5.3.4 或更高版本需要 Team Foundation Server 插件。",
+ "loc.input.label.multibranchPipelineBranch": "多分支管道分支",
+ "loc.input.help.multibranchPipelineBranch": "在指定的分支上对此多分支管道作业排队。Jenkins v5.3.4 或更高版本需要 Team Foundation Server 插件。",
+ "loc.input.label.captureConsole": "获取控制台输出并等待完成",
+ "loc.input.help.captureConsole": "如果选中,则此任务将捕获 Jenkins 生成控制台输出,等待 Jenkins 生成完成,并根据 Jenkins 生成结果而成功/失败。否则,一旦 Jenkins 作业排队成功,此任务将成功完成而不会等待 Jenkins 生成运行。",
+ "loc.input.label.capturePipeline": "获取管道输出并等待管道完成",
+ "loc.input.help.capturePipeline": "如果选中,则此任务将捕获完整的 Jenkins 生成管道控制台输出,等待完整的 Jenkins 生成管道完成,并根据 Jenkins 生成管道结果而成功/失败。否则,一旦第一个 Jenkins 作业完成,此任务将成功完成而不会等待完整的 Jenkins 生成管道运行。",
+ "loc.input.label.parameterizedJob": "参数化的作业",
+ "loc.input.help.parameterizedJob": "选择 Jenkins 作业是否接受参数。即使要使用所有默认参数值且实际未指定任何参数,也应选择此选项。",
+ "loc.input.label.jobParameters": "作业参数",
+ "loc.input.help.jobParameters": "以 \"=\" 的形式指定作业参数(每行一个)若要将参数设置为空值(用于替代默认值),可以不使用参数值。例如,指定 \"=\"支持使用变量。例如,若要将 \"commitId\" 参数值设置为生成的 Git commit ID,请使用: \"commitId=$(Build.SourceVersion)\" 。请参阅 [有关变量的文档](https://go.microsoft.com/fwlink/?linkid=875288)了解更多详细信息。
支持的 Jenkins 参数类型包括:
\"Boolean\" 、\"Choice\" 、\"Password\" 、\"String\" ",
+ "loc.input.label.failOnUnstableResult": "出现不稳定结果时失败",
+ "loc.input.help.failOnUnstableResult": "指定成功定义的严格性: 是否将不稳定视为失败。非严格为 false,严格版本则为 true。",
+ "loc.input.label.retryCount": "连接失败的重试次数",
+ "loc.input.help.retryCount": "指定出错或失败的重试次数",
+ "loc.input.label.delayBetweenRetries": "重试的时间间隔",
+ "loc.input.help.delayBetweenRetries": "指定重试的时间间隔。指定此值时以秒为单位",
+ "loc.messages.FailedToGenerateSummary": "未能生成版本摘要。",
+ "loc.messages.succeeded": "成功",
+ "loc.messages.unstable": "不稳定",
+ "loc.messages.failed": "失败",
+ "loc.messages.notbuilt": "未生成",
+ "loc.messages.aborted": "已中止",
+ "loc.messages.unknown": "未知",
+ "loc.messages.console": "控制台",
+ "loc.messages.JenkinsPipelineComplete": "Jenkins 管道已完成",
+ "loc.messages.JenkinsJobComplete": "Jenkins 作业已完成",
+ "loc.messages.JenkinsJobQueued": "Jenkins 作业已排队",
+ "loc.messages.JenkinsPipelineFailed": "Jenkins 管道失败",
+ "loc.messages.JenkinsJobFailed": "Jenkins 作业失败",
+ "loc.messages.JenkinsJobFailedtoQueue": "Jenkins 作业未能排队",
+ "loc.messages.JenkinsJobQueueUriInvalid": "无法访问由 Jenkins 返回的作业队列的 URI (%s)。请在“管理 Jenkins”、“配置系统”下,验证 Jenkins 服务器上的 \"Jenkins URL\" 配置是否正确。错误详细信息: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/zh-TW/resources.resjson
new file mode 100644
index 000000000000..b2f0da6804a7
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Strings/resources.resjson/zh-TW/resources.resjson
@@ -0,0 +1,44 @@
+{
+ "loc.friendlyName": "將 Jenkins 作業排入佇列",
+ "loc.helpMarkDown": "[深入了解此工作](http://go.microsoft.com/fwlink/?LinkId=816956)。此工作會將作業佇列在 [Jenkins](https://jenkins.io/) 伺服器上。您必須在 Jenkins 上安裝 [Team Foundation Server 外掛程式](https://wiki.jenkins-ci.org/display/JENKINS/Team+Foundation+Server+Plugin)才能使用完整的整合功能。",
+ "loc.description": "將 Jenkins 伺服器上的作業排入佇列",
+ "loc.instanceNameFormat": "將 Jenkins 作業: $(jobName) 排入佇列",
+ "loc.group.displayName.advanced": "進階",
+ "loc.input.label.serverEndpoint": "Jenkins 服務連線",
+ "loc.input.help.serverEndpoint": "請為您的 Jenkins 執行個體選取服務連線。若要建立服務連線,請按一下 [管理] 連結,並建立新的 Jenkins 服務連線。",
+ "loc.input.label.jobName": "作業名稱",
+ "loc.input.help.jobName": "要排入佇列之 Jenkins 作業的名稱。此名稱必須完全符合 Jenkins 伺服器上的作業名稱。",
+ "loc.input.label.isMultibranchJob": "作業屬於多分支管線類型",
+ "loc.input.help.isMultibranchJob": "此作業屬於多分支管線類型。如有選取,請輸入適當的分支名稱。需要 Team Foundation Server Plugin for Jenkins v5.3.4 或更新版本。",
+ "loc.input.label.multibranchPipelineBranch": "多分支管線分支",
+ "loc.input.help.multibranchPipelineBranch": "將此多分支管線作業排入指定分支的佇列中。需要 Team Foundation Server Plugin for Jenkins v5.3.4 或更新版本。",
+ "loc.input.label.captureConsole": "擷取主控台輸出並等候完成",
+ "loc.input.help.captureConsole": "如果選取,此工作將會擷取 Jenkins 組建主控台輸出、等候 Jenkins 組建完成,並根據 Jenkins 組建結果判斷成功/失敗。否則,只要 Jenkins 作業成功排入佇列,此工作就會成功完成,而不會等候 Jenkins 組建執行。",
+ "loc.input.label.capturePipeline": "擷取管線輸出並等候管線完成",
+ "loc.input.help.capturePipeline": "如果選取,此工作將會擷取完整的 Jenkins 組建管線主控台輸出、等候完整的 Jenkins 組建管線完成,並根據 Jenkins 組建管線結果判斷成功/失敗。否則,只要第一個 Jenkins 作業完成,此工作就會成功完成,而不會等候完整的 Jenkins 組建管線執行。",
+ "loc.input.label.parameterizedJob": "參數化作業",
+ "loc.input.help.parameterizedJob": "如果 Jenkins 作業接受參數,則選取此選項。即使使用所有的預設參數值而未實際指定任何參數,也應該選取此選項。",
+ "loc.input.label.jobParameters": "作業參數",
+ "loc.input.help.jobParameters": "以 `=` 的格式一行指定一個做頁參數若要將參數設定為空白的值 (覆寫預設值時很實用),請不理會參數值。例如,指定 `=`
支援變數。例如,若要將 `commitId` 參數值設定為組建的 Git 認可識別碼,可使用: `commitId=$(Build.SourceVersion)` 。如需更多詳細資料,請參閱[關於變數的文件](https://go.microsoft.com/fwlink/?linkid=875288)。
支援的 Jenkins 參數類型包括:
`Boolean` `Choice` `Password` `String` ",
+ "loc.input.label.failOnUnstableResult": "因結果不穩定而失敗",
+ "loc.input.help.failOnUnstableResult": "指定成功定義的嚴格程度: 是否將不穩定視為失敗。False 表示不嚴格,True 則表示嚴格版本。",
+ "loc.input.label.retryCount": "連線失敗的重試次數",
+ "loc.input.help.retryCount": "指定發生錯誤或失敗時的重試次數",
+ "loc.input.label.delayBetweenRetries": "重試的時間間隔",
+ "loc.input.help.delayBetweenRetries": "指定重試的時間間隔。指定時間以秒為單位",
+ "loc.messages.FailedToGenerateSummary": "無法產生組建摘要。",
+ "loc.messages.succeeded": "成功",
+ "loc.messages.unstable": "不穩定",
+ "loc.messages.failed": "失敗",
+ "loc.messages.notbuilt": "未建置",
+ "loc.messages.aborted": "已中止",
+ "loc.messages.unknown": "未知",
+ "loc.messages.console": "主控台",
+ "loc.messages.JenkinsPipelineComplete": "Jenkins 管線完成",
+ "loc.messages.JenkinsJobComplete": "Jenkins 作業完成",
+ "loc.messages.JenkinsJobQueued": "Jenkins 作業已排入佇列",
+ "loc.messages.JenkinsPipelineFailed": "Jenkins 管線失敗",
+ "loc.messages.JenkinsJobFailed": "Jenkins 作業失敗",
+ "loc.messages.JenkinsJobFailedtoQueue": "Jenkins 作業無法排入佇列",
+ "loc.messages.JenkinsJobQueueUriInvalid": "無法連線至 Jenkins 所傳回之作業佇列的 URI (%s)。請驗證 Jenkins 伺服器 `Manage Jenkins` 與 `Configure System` 下的 'Jenkins URL' 設定正確。錯誤詳細資料: %s"
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/Tests/L0.ts b/_generated/JenkinsQueueJobV2/Tests/L0.ts
new file mode 100644
index 000000000000..25af05eea143
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Tests/L0.ts
@@ -0,0 +1,202 @@
+// npm install mocha --save-dev
+// typings install dt~mocha --save --global
+
+import assert = require('assert');
+import path = require('path');
+import process = require('process');
+import {JobState, checkStateTransitions} from '../states';
+
+import * as ttm from 'azure-pipelines-task-lib/mock-test';
+
+describe('JenkinsQueueJob L0 Suite', function () {
+ this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000);
+
+ before((done) => {
+ process.env['ENDPOINT_AUTH_ID1'] = '{\"scheme\":\"UsernamePassword\", \"parameters\": {\"username\": \"uname\", \"password\": \"pword\"}}';
+ process.env['ENDPOINT_URL_ID1'] = 'bogusURL';
+ //Environment variables must have _ in place of .
+ process.env['Build_StagingDirectory'] = 'someBuild_StagingDirectory';
+
+ done();
+ });
+
+ /* tslint:disable:no-empty */
+ after(function () { });
+ /* tslint:enable:no-empty */
+
+ it('run JenkinsQueueJob with no server endpoint', (done) => {
+ const tp: string = path.join(__dirname, 'L0NoServerEndpoint.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ try {
+ tr.run();
+
+ assert(tr.stderr.indexOf('Input required: serverEndpoint') !== -1, 'should have written to stderr');
+ assert(tr.failed, 'task should have failed');
+ done();
+
+ //assert(tr.ran(gradleWrapper + ' build'), 'it should have run gradlew build');
+ //assert(tr.invokedToolCount === 1, 'should have only run gradle 1 time');
+ //assert(tr.stderr.length === 0, 'should not have written to stderr');
+ //assert(tr.succeeded, 'task should have succeeded');
+ //assert(tr.stdout.indexOf('GRADLE_OPTS is now set to -Xmx2048m') > 0);
+ } catch (err) {
+ console.log(tr.stdout);
+ console.log(tr.stderr);
+ console.log(err);
+ done(err);
+ }
+ });
+
+ it('run JenkinsQueueJob with no job name', (done) => {
+ const tp: string = path.join(__dirname, 'L0NoJobName.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ try {
+ tr.run();
+
+ assert(tr.stderr.indexOf('Input required: jobName') !== -1, 'should have written to stderr');
+ assert(tr.failed, 'task should have failed');
+ done();
+ } catch (err) {
+ console.log(tr.stdout);
+ console.log(tr.stderr);
+ console.log(err);
+ done(err);
+ }
+ });
+
+ it('run JenkinsQueueJob with no capture console', (done) => {
+ const tp: string = path.join(__dirname, 'L0NoCaptureConsole.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ try {
+ tr.run();
+
+ assert(tr.stderr.indexOf('Input required: captureConsole') != -1, 'should have written to stderr');
+ assert(tr.failed, 'task should have failed');
+ done();
+ } catch (err) {
+ console.log(tr.stdout);
+ console.log(tr.stderr);
+ console.log(err);
+ done(err);
+ }
+ });
+
+ it('run JenkinsQueueJob with no capture pipeline', (done) => {
+ const tp: string = path.join(__dirname, 'L0NoCapturePipeline.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ try {
+ tr.run();
+
+ assert(tr.stderr.indexOf('Input required: capturePipeline') != -1, 'should have written to stderr');
+ assert(tr.failed, 'task should have failed');
+ done();
+ } catch (err) {
+ console.log(tr.stdout);
+ console.log(tr.stderr);
+ console.log(err);
+ done(err);
+ }
+ });
+
+ it('run JenkinsQueueJob with no parameterized job', (done) => {
+ const tp: string = path.join(__dirname, 'L0NoParameterizedJob.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ try {
+ tr.run();
+
+ assert(tr.stderr.indexOf('Input required: parameterizedJob') != -1, 'should have written to stderr');
+ assert(tr.failed, 'task should have failed');
+ done();
+ } catch (err) {
+ console.log(tr.stdout);
+ console.log(tr.stderr);
+ console.log(err);
+ done(err);
+ }
+ });
+
+ it('run JenkinsQueueJob with bogus url no parameters', (done) => {
+ const tp: string = path.join(__dirname, 'L0BogusUrlNoParameters.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ try {
+ tr.run();
+
+ assert(tr.stderr.indexOf('Error: Invalid URI "bogusURL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)"') != -1, 'should have written to stderr');
+ assert(tr.failed, 'task should have failed');
+ done();
+ } catch (err) {
+ console.log(tr.stdout);
+ console.log(tr.stderr);
+ console.log(err);
+ done(err);
+ }
+ });
+
+ it('run JenkinsQueueJob with bogus url with parameters', (done) => {
+ const tp: string = path.join(__dirname, 'L0BogusUrlParameters.js');
+ const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp);
+
+ try {
+ tr.run();
+
+ assert(tr.stderr.indexOf('Error: Invalid URI "bogusURL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)"') != -1, 'should have written to stderr');
+ assert(tr.failed, 'task should have failed');
+ done();
+ } catch (err) {
+ console.log(tr.stdout);
+ console.log(tr.stderr);
+ console.log(err);
+ done(err);
+ }
+ });
+
+ it('[Job state] Run the longest test scenario of the state transitions', (done) => {
+ let currentState: JobState = JobState.New;
+
+ // the longest scenario from possible
+ const expectedScenario: Array = [
+ JobState.Locating,
+ JobState.Streaming,
+ JobState.Finishing,
+ JobState.Downloading,
+ JobState.Done
+ ];
+
+ const executedScenario: Array = [];
+
+ for (const newState of expectedScenario) {
+ const isValidTransition: boolean = checkStateTransitions(currentState, newState);
+ if (isValidTransition) {
+ executedScenario.push(newState);
+ currentState = newState;
+ } else {
+ console.log(`Invalid state transition from: ${JobState[currentState]} to: ${JobState[newState]}`);
+ break;
+ }
+ }
+
+ assert.deepEqual(expectedScenario, executedScenario);
+ done();
+ });
+
+ it('[Job state] Check that transition rules are defined for all states', (done) => {
+ try {
+ const stateList = Object.keys(JobState).filter((element) => isNaN(Number(element)));
+
+ for (const testedState of stateList) {
+ for (const state of stateList) {
+ checkStateTransitions(JobState[testedState], JobState[state]);
+ }
+ }
+ done();
+ } catch (error) {
+ done(error);
+ }
+ });
+});
diff --git a/_generated/JenkinsQueueJobV2/Tests/L0BogusUrlNoParameters.ts b/_generated/JenkinsQueueJobV2/Tests/L0BogusUrlNoParameters.ts
new file mode 100644
index 000000000000..6969542e00df
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Tests/L0BogusUrlNoParameters.ts
@@ -0,0 +1,26 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'jenkinsqueuejobtask.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('jobName', 'SomeJobName');
+tr.setInput('captureConsole', 'true');
+tr.setInput('capturePipeline', 'true');
+tr.setInput('parameterizedJob', 'false');
+
+// provide answers for task mock
+const a: ma.TaskLibAnswers = {
+ 'checkPath': {
+ 'gradlew': true,
+ 'gradlew.bat': true
+ },
+ 'osType': {
+ 'osType': 'Windows'
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JenkinsQueueJobV2/Tests/L0BogusUrlParameters.ts b/_generated/JenkinsQueueJobV2/Tests/L0BogusUrlParameters.ts
new file mode 100644
index 000000000000..823a2118e053
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Tests/L0BogusUrlParameters.ts
@@ -0,0 +1,26 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'jenkinsqueuejobtask.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('jobName', 'SomeJobName');
+tr.setInput('captureConsole', 'true');
+tr.setInput('capturePipeline', 'true');
+tr.setInput('parameterizedJob', 'true');
+
+// provide answers for task mock
+const a: ma.TaskLibAnswers = {
+ 'checkPath': {
+ 'gradlew': true,
+ 'gradlew.bat': true
+ },
+ 'osType': {
+ 'osType': 'Windows'
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JenkinsQueueJobV2/Tests/L0NoCaptureConsole.ts b/_generated/JenkinsQueueJobV2/Tests/L0NoCaptureConsole.ts
new file mode 100644
index 000000000000..9c647e168b74
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Tests/L0NoCaptureConsole.ts
@@ -0,0 +1,26 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'jenkinsqueuejobtask.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('jobName', 'SomeJobName');
+//tr.setInput('captureConsole', 'true');
+//tr.setInput('capturePipeline', 'true');
+//tr.setInput('parameterizedJob', 'false');
+
+// provide answers for task mock
+const a: ma.TaskLibAnswers = {
+ 'checkPath': {
+ 'gradlew': true,
+ 'gradlew.bat': true
+ },
+ 'osType': {
+ 'osType': 'Windows'
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JenkinsQueueJobV2/Tests/L0NoCapturePipeline.ts b/_generated/JenkinsQueueJobV2/Tests/L0NoCapturePipeline.ts
new file mode 100644
index 000000000000..604dfbe44941
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Tests/L0NoCapturePipeline.ts
@@ -0,0 +1,26 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'jenkinsqueuejobtask.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('jobName', 'SomeJobName');
+tr.setInput('captureConsole', 'true');
+//tr.setInput('capturePipeline', 'true');
+//tr.setInput('parameterizedJob', 'false');
+
+// provide answers for task mock
+const a: ma.TaskLibAnswers = {
+ 'checkPath': {
+ 'gradlew': true,
+ 'gradlew.bat': true
+ },
+ 'osType': {
+ 'osType': 'Windows'
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JenkinsQueueJobV2/Tests/L0NoJobName.ts b/_generated/JenkinsQueueJobV2/Tests/L0NoJobName.ts
new file mode 100644
index 000000000000..39e7414bd881
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Tests/L0NoJobName.ts
@@ -0,0 +1,26 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'jenkinsqueuejobtask.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+//tr.setInput('jobName', 'SomeJobName');
+//tr.setInput('captureConsole', 'true');
+//tr.setInput('capturePipeline', 'true');
+//tr.setInput('parameterizedJob', 'false');
+
+// provide answers for task mock
+const a: ma.TaskLibAnswers = {
+ 'checkPath': {
+ 'gradlew': true,
+ 'gradlew.bat': true
+ },
+ 'osType': {
+ 'osType': 'Windows'
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JenkinsQueueJobV2/Tests/L0NoParameterizedJob.ts b/_generated/JenkinsQueueJobV2/Tests/L0NoParameterizedJob.ts
new file mode 100644
index 000000000000..62d7c172637b
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Tests/L0NoParameterizedJob.ts
@@ -0,0 +1,26 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'jenkinsqueuejobtask.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+tr.setInput('serverEndpoint', 'ID1');
+tr.setInput('jobName', 'SomeJobName');
+tr.setInput('captureConsole', 'true');
+tr.setInput('capturePipeline', 'true');
+//tr.setInput('parameterizedJob', 'false');
+
+// provide answers for task mock
+const a: ma.TaskLibAnswers = {
+ 'checkPath': {
+ 'gradlew': true,
+ 'gradlew.bat': true
+ },
+ 'osType': {
+ 'osType': 'Windows'
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JenkinsQueueJobV2/Tests/L0NoServerEndpoint.ts b/_generated/JenkinsQueueJobV2/Tests/L0NoServerEndpoint.ts
new file mode 100644
index 000000000000..5a85d3692d10
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/Tests/L0NoServerEndpoint.ts
@@ -0,0 +1,26 @@
+import ma = require('azure-pipelines-task-lib/mock-answer');
+import tmrm = require('azure-pipelines-task-lib/mock-run');
+import path = require('path');
+
+const taskPath = path.join(__dirname, '..', 'jenkinsqueuejobtask.js');
+const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath);
+
+//tr.setInput('serverEndpoint', 'ID1');
+//tr.setInput('jobName', 'SomeJobName');
+//tr.setInput('captureConsole', 'true');
+//tr.setInput('capturePipeline', 'true');
+//tr.setInput('parameterizedJob', 'false');
+
+// provide answers for task mock
+const a: ma.TaskLibAnswers = {
+ 'checkPath': {
+ 'gradlew': true,
+ 'gradlew.bat': true
+ },
+ 'osType': {
+ 'osType': 'Windows'
+ }
+};
+tr.setAnswers(a);
+
+tr.run();
diff --git a/_generated/JenkinsQueueJobV2/ThirdPartyNotices.txt b/_generated/JenkinsQueueJobV2/ThirdPartyNotices.txt
new file mode 100644
index 000000000000..9a2e18af57bd
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/ThirdPartyNotices.txt
@@ -0,0 +1,11 @@
+---------------------------------------- START OF THIRD PARTY NOTICE -----------------------------------------
+Jenkins logo
+
+These images are also available in various sizes and SVG formats online, or as a zip file, https://wiki.jenkins-ci.org/display/JENKINS/Logo
+These are licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License, https://creativecommons.org/licenses/by-sa/3.0/
+Under the terms of this license, you must include an attribution to the Jenkins project, with a link (https://jenkins.io/), if you display these logos or derivates thereof.
+
+Credits
+
+Thanks to Charles Lowell, https://wiki.jenkins-ci.org/display/~cowboyd, and Frontside, http://thefrontside.net/ for coming up with this logo!
+--------------------------------------- END OF THIRD PARTY NOTICE --------------------------------------------
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/icon.png b/_generated/JenkinsQueueJobV2/icon.png
new file mode 100644
index 000000000000..98e8dd36934d
Binary files /dev/null and b/_generated/JenkinsQueueJobV2/icon.png differ
diff --git a/_generated/JenkinsQueueJobV2/icon.svg b/_generated/JenkinsQueueJobV2/icon.svg
new file mode 100644
index 000000000000..c8d02339e185
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/icon.svg
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/_generated/JenkinsQueueJobV2/jenkinsqueuejobtask.ts b/_generated/JenkinsQueueJobV2/jenkinsqueuejobtask.ts
new file mode 100644
index 000000000000..a83e4ea2b6da
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/jenkinsqueuejobtask.ts
@@ -0,0 +1,145 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+import tl = require('azure-pipelines-task-lib/task');
+import fs = require('fs');
+import path = require('path');
+import shell = require('shelljs');
+import Q = require('q');
+import os = require('os');
+import util = require('./util');
+
+import { Job } from './job';
+import { JobQueue } from './jobqueue';
+
+export class TaskOptions {
+ serverEndpoint: string;
+ serverEndpointUrl: string;
+
+ serverEndpointAuth: tl.EndpointAuthorization;
+ username: string;
+ password: string;
+
+ jobName: string;
+ isMultibranchPipelineJob: boolean;
+ multibranchPipelineBranch: string;
+
+ captureConsole: boolean;
+ // capturePipeline is only possible if captureConsole mode is enabled
+ capturePipeline: boolean;
+
+ pollIntervalMillis: number;
+
+ //initialize retry count and timer
+ retryCount: number;
+ delayBetweenRetries: number;
+
+ parameterizedJob: boolean;
+ // jobParameters are only possible if parameterizedJob is enabled
+ jobParameters: string[];
+
+ failOnUnstableResult: boolean;
+
+ jobQueueUrl: string;
+ teamJobQueueUrl: string;
+ teamPluginUrl: string;
+
+ teamBuildPluginAvailable: boolean;
+ saveResultsTo: string;
+
+ strictSSL: boolean;
+
+ NO_CRUMB: string;
+ crumb: string;
+
+ shouldFail: boolean;
+ failureMsg: string;
+
+ constructor() {
+ this.serverEndpoint = tl.getInput('serverEndpoint', true);
+ this.serverEndpointUrl = tl.getEndpointUrl(this.serverEndpoint, false);
+ tl.debug('serverEndpointUrl=' + this.serverEndpointUrl);
+ this.serverEndpointAuth = tl.getEndpointAuthorization(this.serverEndpoint, false);
+ this.username = this.serverEndpointAuth['parameters']['username'];
+ this.password = this.serverEndpointAuth['parameters']['password'];
+
+ this.jobName = tl.getInput('jobName', true);
+ this.isMultibranchPipelineJob = tl.getBoolInput('isMultibranchJob', false);
+ if (this.isMultibranchPipelineJob) {
+ this.multibranchPipelineBranch = tl.getInput('multibranchPipelineBranch', true);
+ }
+
+ this.captureConsole = tl.getBoolInput('captureConsole', true);
+ // capturePipeline is only possible if captureConsole mode is enabled
+ this.capturePipeline = this.captureConsole ? tl.getBoolInput('capturePipeline', true) : false;
+
+ this.pollIntervalMillis = 5000; // five seconds is what the Jenkins Web UI uses
+
+ this.retryCount = parseInt(tl.getInput('retryCount', false));
+ this.delayBetweenRetries = parseInt(tl.getInput('delayBetweenRetries', false));
+
+ this.parameterizedJob = tl.getBoolInput('parameterizedJob', true);
+ // jobParameters are only possible if parameterizedJob is enabled
+ this.jobParameters = this.parameterizedJob ? tl.getDelimitedInput('jobParameters', '\n', false) : [];
+ this.failOnUnstableResult = tl.getBoolInput('failOnUnstableResult', false);
+
+ this.jobQueueUrl = util.addUrlSegment(this.serverEndpointUrl, util.convertJobName(this.jobName)) + ((this.parameterizedJob) ? '/buildWithParameters?delay=0sec' : '/build?delay=0sec');
+ tl.debug('jobQueueUrl=' + this.jobQueueUrl);
+ this.teamJobQueueUrl = util.addUrlSegment(this.serverEndpointUrl, '/team-build/' + ((this.parameterizedJob) ? 'buildWithParameters/' : 'build/') + this.jobName + '?delay=0sec');
+ tl.debug('teamJobQueueUrl=' + this.teamJobQueueUrl);
+ this.teamPluginUrl = util.addUrlSegment(this.serverEndpointUrl, '/pluginManager/available');
+ tl.debug('teamPluginUrl=' + this.teamPluginUrl);
+
+ this.teamBuildPluginAvailable = false;
+ // 'Build.StagingDirectory' is available during build.
+ // It is kept here (different than what is used during release) to maintain
+ // compatibility with other tasks relying on Jenkins results being placed in this folder.
+ let resultsDirectory: string = tl.getVariable('Build.StagingDirectory');
+ if (!resultsDirectory) {
+ // 'System.DefaultWorkingDirectory' is available during build and release
+ resultsDirectory = tl.getVariable('System.DefaultWorkingDirectory');
+ }
+ this.saveResultsTo = path.join(resultsDirectory, 'jenkinsResults');
+
+ this.strictSSL = ('true' !== tl.getEndpointDataParameter(this.serverEndpoint, 'acceptUntrustedCerts', true));
+ tl.debug('strictSSL=' + this.strictSSL);
+
+ this.NO_CRUMB = 'NO_CRUMB';
+ this.crumb = this.NO_CRUMB;
+
+ this.shouldFail = false;
+ this.failureMsg = '';
+ }
+}
+
+async function doWork() {
+ try {
+ tl.setResourcePath(path.join( __dirname, 'task.json'));
+
+ const taskOptions: TaskOptions = new TaskOptions();
+ const jobQueue: JobQueue = new JobQueue(taskOptions);
+ const queueUri = await util.pollSubmitJob(taskOptions);
+ console.log(tl.loc('JenkinsJobQueued'));
+ const rootJob = await util.pollCreateRootJob(queueUri, jobQueue, taskOptions);
+ //start the job queue
+ jobQueue.Start();
+ //store the job name in the output variable
+ tl.setVariable('JENKINS_JOB_ID', rootJob.ExecutableNumber.toString());
+ } catch (e) {
+ let message: string;
+ if (e instanceof util.HttpError) {
+ message = e.message;
+ console.error(e.fullMessage);
+ console.error(e.body);
+ } else if (e instanceof Error) {
+ message = e.message;
+ console.error(e);
+ } else {
+ message = e;
+ console.error(e);
+ }
+ tl.setResult(tl.TaskResult.Failed, message);
+ }
+}
+
+doWork();
diff --git a/_generated/JenkinsQueueJobV2/job.ts b/_generated/JenkinsQueueJobV2/job.ts
new file mode 100644
index 000000000000..1c2ceaf8746a
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/job.ts
@@ -0,0 +1,503 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+import tl = require('azure-pipelines-task-lib/task');
+import fs = require('fs');
+import os = require('os');
+import path = require('path');
+import url = require('url');
+import request = require('request');
+
+import { JobSearch } from './jobsearch';
+import { JobQueue } from './jobqueue';
+import { unzip } from './unzip';
+import {JobState, checkStateTransitions} from './states';
+
+import * as Util from './util';
+
+export class Job {
+ public Parent: Job; // if this job is a pipelined job, its parent that started it.
+ public Children: Job[] = []; // any pipelined jobs
+ public Joined: Job; // if this job is joined, the main job that is running
+ public Search: JobSearch;
+ private queue: JobQueue;
+
+ public TaskUrl: string; // URL for the job definition
+
+ public State: JobState = JobState.New;
+ public ExecutableUrl: string; // URL for the executing job instance
+ public ExecutableNumber: number;
+ public Name: string;
+ public Identifier: string; // a job identifier that takes into account folder structure
+ private jobConsole: string = '';
+ private jobConsoleOffset: number = 0;
+ private jobConsoleEnabled: boolean = false;
+
+ private working: boolean = true; // initially mark it as working
+ private workDelay: number = 0;
+ private retryNumber: number;
+
+ public ParsedExecutionResult: {result: string, timestamp: number}; // set during state Finishing
+
+ constructor(jobQueue: JobQueue, parent: Job, taskUrl: string, executableUrl: string, executableNumber: number, name: string) {
+ this.Parent = parent;
+ this.TaskUrl = taskUrl;
+ this.ExecutableUrl = executableUrl;
+ this.ExecutableNumber = executableNumber;
+ this.Name = name;
+ if (this.Parent != null) {
+ this.Parent.Children.push(this);
+ }
+ this.queue = jobQueue;
+ this.retryNumber = 0;
+ if (this.TaskUrl.startsWith(this.queue.TaskOptions.serverEndpointUrl)) {
+ // simplest case (jobs run on the same server name as the endpoint)
+ this.Identifier = this.TaskUrl.substr(this.queue.TaskOptions.serverEndpointUrl.length);
+ } else {
+ // backup check in case job is running on a different server name than the endpoint
+ this.Identifier = url.parse(this.TaskUrl).path.substr(1);
+ const jobStringIndex: number = this.Identifier.indexOf('job/');
+ if (jobStringIndex > 0) {
+ // can fall into here if the jenkins endpoint is not at the server root; e.g. serverUrl/jenkins instead of serverUrl
+ this.Identifier = this.Identifier.substr(jobStringIndex);
+ }
+ }
+ this.queue.AddJob(this);
+
+ this.debug('created');
+ this.initialize();
+ }
+
+ /**
+ * All changes to the job state should be routed through here.
+ * This defines all and validates all state transitions.
+ */
+ private changeState(newState: JobState) {
+ const currentState: JobState = this.State;
+ this.debug(`state changed from ${JobState[currentState]} to ${JobState[newState]}`);
+
+ const validStateChange: boolean = checkStateTransitions(currentState, newState);
+ if (!validStateChange) {
+ Util.fail(`Invalid state change from: ${JobState[currentState]} to: ${JobState[newState]} ${this}`);
+ }
+
+ this.State = newState;
+ }
+
+ public DoWork() {
+ if (this.working) { // return if already working
+ return;
+ } else {
+ this.working = true;
+ setTimeout(() => {
+ switch (this.State) {
+ case (JobState.New): {
+ this.initialize();
+ break;
+ }
+
+ case (JobState.Streaming): {
+ this.streamConsole();
+ break;
+ }
+
+ case (JobState.Downloading): {
+ this.downloadResults();
+ break;
+ }
+
+ case (JobState.Finishing): {
+ this.finish();
+ break;
+ }
+
+ default: {
+ // usually do not get here, but this can happen if another callback caused this job to be joined
+ this.stopWork(this.queue.TaskOptions.pollIntervalMillis, null);
+ break;
+ }
+ }
+ }, this.workDelay);
+ }
+ }
+
+ private stopWork(delay: number, jobState: JobState) {
+ if (jobState && jobState !== this.State) {
+ this.changeState(jobState);
+ if (!this.IsActive()) {
+ this.queue.FlushJobConsolesSafely();
+ }
+ }
+ this.workDelay = delay;
+ this.working = false;
+ }
+
+
+ private RetryConnection(): void {
+ this.retryNumber++;
+ this.consoleLog(`Connection error. Retrying again in ${this.queue.TaskOptions.delayBetweenRetries} seconds. Retry ${this.retryNumber} out of ${this.queue.TaskOptions.retryCount}`);
+ this.stopWork(this.queue.TaskOptions.delayBetweenRetries*1000, this.State);
+ }
+
+ public IsActive(): boolean {
+ return this.State === JobState.New ||
+ this.State === JobState.Locating ||
+ this.State === JobState.Streaming ||
+ this.State === JobState.Downloading ||
+ this.State === JobState.Finishing;
+ }
+
+ private getBlockMessage(message: string): string {
+ const divider: string = '******************************************************************************';
+ const blockMessage: string = divider + '\n' + message + ' \n' + divider;
+ return blockMessage;
+ }
+
+ public SetStreaming(executableNumber: number): void {
+ // If we aren't waiting for the job to finish then we should end it now
+ if (!this.queue.TaskOptions.captureConsole) { // transition to Finishing
+ this.changeState(JobState.Streaming);
+ this.changeState(JobState.Finishing);
+ return;
+ }
+ if (this.State === JobState.New || this.State === JobState.Locating) {
+ this.ExecutableNumber = executableNumber;
+ this.ExecutableUrl = Util.addUrlSegment(this.TaskUrl, this.ExecutableNumber.toString());
+ this.changeState(JobState.Streaming);
+ // log the jobs starting block
+ this.consoleLog(this.getBlockMessage('Jenkins job started: ' + this.Name + '\n' + this.ExecutableUrl));
+ // log any pending jobs
+ if (this.queue.FindActiveConsoleJob() == null) {
+ console.log('Jenkins job pending: ' + this.ExecutableUrl);
+ }
+ } else if (this.State === JobState.Joined || this.State === JobState.Cut) {
+ Util.fail('Can not be set to streaming: ' + this);
+ }
+ this.joinOthersToMe();
+ }
+
+ private joinOthersToMe() {
+ //join all other siblings to this same job (as long as it's not root)
+ const thisJob: Job = this;
+ if (thisJob.Parent != null) {
+ thisJob.Search.DetermineMainJob(thisJob.ExecutableNumber, function (mainJob: Job, secondaryJobs: Job[]) {
+ if (mainJob != thisJob) {
+ Util.fail('Illegal call in joinOthersToMe(), job:' + thisJob);
+ }
+ for (const i in secondaryJobs) {
+ const secondaryJob: Job = secondaryJobs[i];
+ if (secondaryJob.State !== JobState.Cut) {
+ secondaryJob.SetJoined(thisJob);
+ }
+ }
+ });
+ }
+ }
+
+ public SetJoined(joinedJob: Job): void {
+ tl.debug(this + '.setJoined(' + joinedJob + ')');
+ this.Joined = joinedJob;
+ this.changeState(JobState.Joined);
+ if (joinedJob.State === JobState.Joined || joinedJob.State === JobState.Cut) {
+ Util.fail('Invalid join: ' + this);
+ }
+
+ // recursively cut all children
+ for (const i in this.Children) {
+ this.Children[i].Cut();
+ }
+ }
+
+ public Cut(): void {
+ this.changeState(JobState.Cut);
+ for (const i in this.Children) {
+ this.Children[i].Cut();
+ }
+ }
+
+ private setParsedExecutionResult(parsedExecutionResult: {result: string, timestamp: number}) {
+ this.ParsedExecutionResult = parsedExecutionResult;
+ //log the job's closing block
+ this.consoleLog(this.getBlockMessage('Jenkins job finished: ' + this.Name + '\n' + this.ExecutableUrl));
+ }
+
+ public GetTaskResult(): number {
+ if (this.State === JobState.Queued) {
+ return tl.TaskResult.Succeeded;
+ } else if (this.State === JobState.Done) {
+ const resultCode = this.ParsedExecutionResult.result.toUpperCase();
+ if (resultCode == 'SUCCESS' || (resultCode == 'UNSTABLE' && !this.queue.TaskOptions.failOnUnstableResult)) {
+ return tl.TaskResult.Succeeded;
+ } else {
+ return tl.TaskResult.Failed;
+ }
+ }
+ return tl.TaskResult.Failed;
+ }
+
+ public GetResultString(): string {
+ if (this.State === JobState.Queued) {
+ return 'Queued';
+ } else if (this.State === JobState.Done) {
+ const resultCode: string = this.ParsedExecutionResult.result.toUpperCase();
+ // codes map to fields in http://hudson-ci.org/javadoc/hudson/model/Result.html
+ if (resultCode == 'SUCCESS') {
+ return tl.loc('succeeded');
+ } else if (resultCode == 'UNSTABLE') {
+ return tl.loc('unstable');
+ } else if (resultCode == 'FAILURE') {
+ return tl.loc('failed');
+ } else if (resultCode == 'NOT_BUILT') {
+ return tl.loc('notbuilt');
+ } else if (resultCode == 'ABORTED') {
+ return tl.loc('aborted');
+ } else {
+ return resultCode;
+ }
+ } else {
+ return tl.loc('unknown');
+ }
+ }
+
+ private initialize() {
+ const thisJob: Job = this;
+ thisJob.Search.Initialize().then(() => {
+ if (thisJob.Search.Initialized) {
+ if (thisJob.queue.TaskOptions.capturePipeline) {
+ const downstreamProjects = thisJob.Search.ParsedTaskBody.downstreamProjects || [];
+ downstreamProjects.forEach((project) => {
+ if (project.color !== 'disabled') {
+ new Job(thisJob.queue, thisJob, project.url, null, -1, project.name); // will add a new child to the tree
+ }
+ });
+ }
+ thisJob.Search.ResolveIfKnown(thisJob); // could change state
+ const newState: JobState = (thisJob.State === JobState.New) ? JobState.Locating : thisJob.State; // another call back could also change state
+ const nextWorkDelay: number = (newState === JobState.Locating) ? thisJob.queue.TaskOptions.pollIntervalMillis : thisJob.workDelay;
+ thisJob.stopWork(nextWorkDelay, newState);
+ } else {
+ //search not initialized, so try again
+ thisJob.stopWork(thisJob.queue.TaskOptions.pollIntervalMillis, thisJob.State);
+ }
+ }).fail((err) => {
+ throw err;
+ });
+ }
+
+ /**
+ * Checks the success of the job
+ *
+ * JobState = Finishing, transition to Downloading, Done, or Queued possible
+ */
+ private finish(): void {
+ const thisJob: Job = this;
+ tl.debug('finish()');
+ if (!thisJob.queue.TaskOptions.captureConsole) { // transition to Queued
+ thisJob.stopWork(0, JobState.Queued);
+ } else { // stay in Finishing, or eventually go to Done
+ const resultUrl: string = Util.addUrlSegment(thisJob.ExecutableUrl, 'api/json?tree=result,timestamp');
+ thisJob.debug('Tracking completion status of job: ' + resultUrl);
+ request.get({ url: resultUrl, strictSSL: thisJob.queue.TaskOptions.strictSSL }, function requestCallback(err, httpResponse, body) {
+ tl.debug('finish().requestCallback()');
+ if (err) {
+ Util.handleConnectionResetError(err); // something went bad
+ thisJob.stopWork(thisJob.queue.TaskOptions.pollIntervalMillis, thisJob.State);
+ return;
+ } else if (httpResponse.statusCode !== 200) {
+ console.error(`Job was killed because of an response with unexpected status code from Jenkins - ${httpResponse.statusCode}`);
+ Util.failReturnCode(httpResponse, 'Job progress tracking failed to read job result');
+ thisJob.stopWork(0, JobState.Killed);
+ } else {
+ const parsedBody: {result: string, timestamp: number} = JSON.parse(body);
+ thisJob.debug(`parsedBody for: ${resultUrl} : ${JSON.stringify(parsedBody)}`);
+ if (parsedBody.result) {
+ thisJob.setParsedExecutionResult(parsedBody);
+ if (thisJob.queue.TaskOptions.teamBuildPluginAvailable) {
+ thisJob.stopWork(0, JobState.Downloading);
+ } else {
+ thisJob.stopWork(0, JobState.Done);
+ }
+ } else {
+ // result not updated yet -- keep trying
+ thisJob.stopWork(thisJob.queue.TaskOptions.pollIntervalMillis, thisJob.State);
+ }
+ }
+ }).auth(thisJob.queue.TaskOptions.username, thisJob.queue.TaskOptions.password, true);
+ }
+ }
+
+ private downloadResults(): void {
+ const thisJob: Job = this;
+ const downloadUrl: string = Util.addUrlSegment(thisJob.ExecutableUrl, 'team-results/zip');
+ tl.debug('downloadResults(), url:' + downloadUrl);
+
+ const downloadRequest = request.get({ url: downloadUrl, strictSSL: thisJob.queue.TaskOptions.strictSSL })
+ .auth(thisJob.queue.TaskOptions.username, thisJob.queue.TaskOptions.password, true)
+ .on('error', (err) => {
+ Util.handleConnectionResetError(err); // something went bad
+ thisJob.stopWork(thisJob.queue.TaskOptions.pollIntervalMillis, thisJob.State);
+ })
+ .on('response', (response) => {
+ tl.debug('downloadResults(), url:' + downloadUrl + ' , response.statusCode: ' + response.statusCode + ', response.statusMessage: ' + response.statusMessage);
+ if (response.statusCode == 404) { // expected if there are no results
+ tl.debug('no results to download');
+ thisJob.stopWork(0, JobState.Done);
+ } else if (response.statusCode == 200) { // successfully found results
+ const destinationFolder: string = path.join(thisJob.queue.TaskOptions.saveResultsTo, thisJob.Name + '/');
+ const fileName: string = path.join(destinationFolder, 'team-results.zip');
+
+ try {
+ // Create the destination folder if it doesn't exist
+ if (!tl.exist(destinationFolder)) {
+ tl.debug('creating results destination folder: ' + destinationFolder);
+ tl.mkdirP(destinationFolder);
+ }
+
+ tl.debug('downloading results file: ' + fileName);
+
+ const file: fs.WriteStream = fs.createWriteStream(fileName);
+ downloadRequest.pipe(file)
+ .on('error', (err) => { throw err; })
+ .on('finish', function fileFinished() {
+ tl.debug('successfully downloaded results to: ' + fileName);
+ try {
+ unzip(fileName, destinationFolder);
+ thisJob.stopWork(0, JobState.Done);
+ } catch (e) {
+ tl.warning('unable to extract results file');
+ tl.debug(e.message);
+ process.stderr.write(e + os.EOL);
+ thisJob.stopWork(0, JobState.Done);
+ }
+ });
+ } catch (err) {
+ // don't fail the job if the results can not be downloaded successfully
+ tl.warning('unable to download results to file: ' + fileName + ' for Jenkins Job: ' + thisJob.ExecutableUrl);
+ tl.warning(err.message);
+ process.stderr.write(err + os.EOL);
+ thisJob.stopWork(0, JobState.Done);
+ }
+ } else { // an unexepected error with results
+ try {
+ const warningMessage: string = (response.statusCode >= 500) ?
+ 'A Jenkins error occurred while retrieving results. Results could not be downloaded.' : // Jenkins server error
+ 'Jenkins results could not be downloaded.'; // Any other error
+ tl.warning(warningMessage);
+ const warningStream: any = new Util.StringWritable({ decodeStrings: false });
+ downloadRequest.pipe(warningStream)
+ .on('error', (err) => { throw err; })
+ .on('finish', function finished() {
+ tl.warning(warningStream);
+ thisJob.stopWork(0, JobState.Done);
+ });
+ } catch (err) {
+ // don't fail the job if the results can not be downloaded successfully
+ tl.warning(err.message);
+ process.stderr.write(err + os.EOL);
+ thisJob.stopWork(0, JobState.Done);
+ }
+ }
+ });
+ }
+
+ /**
+ * Streams the Jenkins console.
+ *
+ * JobState = Streaming, transition to Finishing possible.
+ */
+ private streamConsole(): void {
+ const thisJob: Job = this;
+ const fullUrl: string = Util.addUrlSegment(thisJob.ExecutableUrl, '/logText/progressiveText/?start=' + thisJob.jobConsoleOffset);
+ thisJob.debug('Tracking progress of job URL: ' + fullUrl);
+ request.get({ url: fullUrl, strictSSL: thisJob.queue.TaskOptions.strictSSL }, function requestCallback(err, httpResponse, body) {
+ tl.debug('streamConsole().requestCallback()');
+ if (err) {
+ if (thisJob.retryNumber >= thisJob.queue.TaskOptions.retryCount) {
+ Util.handleConnectionResetError(err); // something went bad
+ thisJob.stopWork(thisJob.queue.TaskOptions.pollIntervalMillis, thisJob.State);
+ return;
+ }
+ else {
+ thisJob.RetryConnection();
+ }
+ } else if (httpResponse.statusCode === 404) {
+ // got here too fast, stream not yet available, try again in the future
+ thisJob.stopWork(thisJob.queue.TaskOptions.pollIntervalMillis, thisJob.State);
+ } else if (httpResponse.statusCode === 401) {
+ Util.failReturnCode(httpResponse, 'Job progress tracking failed to read job progress');
+ thisJob.queue.TaskOptions.captureConsole = false;
+ thisJob.queue.TaskOptions.capturePipeline = false;
+ thisJob.queue.TaskOptions.shouldFail = true;
+ thisJob.queue.TaskOptions.failureMsg = 'Job progress tracking failed to read job progress';
+ thisJob.stopWork(0, JobState.Finishing);
+ } else if (httpResponse.statusCode !== 200) {
+ if (thisJob.retryNumber >= thisJob.queue.TaskOptions.retryCount) {
+ Util.failReturnCode(httpResponse, 'Job progress tracking failed to read job progress');
+ thisJob.stopWork(thisJob.queue.TaskOptions.pollIntervalMillis, thisJob.State);
+ }
+ else {
+ thisJob.RetryConnection();
+ }
+ } else {
+ thisJob.consoleLog(body); // redirect Jenkins console to task console
+ const xMoreData: string = httpResponse.headers['x-more-data'];
+ if (xMoreData && xMoreData == 'true') {
+ const offset: string = httpResponse.headers['x-text-size'];
+ thisJob.jobConsoleOffset = Number.parseInt(offset);
+ thisJob.stopWork(thisJob.queue.TaskOptions.pollIntervalMillis, thisJob.State);
+ } else { // no more console, move to Finishing
+ thisJob.stopWork(0, JobState.Finishing);
+ }
+ }
+ }).auth(thisJob.queue.TaskOptions.username, thisJob.queue.TaskOptions.password, true)
+ .on('error', (err) => {
+ if (thisJob.retryNumber >= thisJob.queue.TaskOptions.retryCount) {
+ throw err;
+ }
+ else {
+ thisJob.consoleLog(err);
+ }
+ });
+ }
+
+ public EnableConsole() {
+ const thisJob: Job = this;
+ if (thisJob.queue.TaskOptions.captureConsole) {
+ if (!this.jobConsoleEnabled) {
+ if (this.jobConsole != '') { // flush any queued output
+ console.log(this.jobConsole);
+ }
+ this.jobConsoleEnabled = true;
+ }
+ }
+ }
+
+ public IsConsoleEnabled() {
+ return this.jobConsoleEnabled;
+ }
+
+ private consoleLog(message: string) {
+ if (this.jobConsoleEnabled) {
+ //only log it if the console is enabled.
+ console.log(message);
+ }
+ this.jobConsole += message;
+ }
+
+ private debug(message: string) {
+ const fullMessage: string = this.toString() + ' debug: ' + message;
+ tl.debug(fullMessage);
+ }
+
+ private toString() {
+ let fullMessage: string = '(' + this.State + ':' + this.Name + ':' + this.ExecutableNumber;
+ if (this.Parent != null) {
+ fullMessage += ', p:' + this.Parent;
+ }
+ if (this.Joined != null) {
+ fullMessage += ', j:' + this.Joined;
+ }
+ fullMessage += ')';
+ return fullMessage;
+ }
+}
diff --git a/_generated/JenkinsQueueJobV2/jobqueue.ts b/_generated/JenkinsQueueJobV2/jobqueue.ts
new file mode 100644
index 000000000000..e0da4df8183b
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/jobqueue.ts
@@ -0,0 +1,339 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+import tl = require('azure-pipelines-task-lib/task');
+import fs = require('fs');
+import path = require('path');
+import shell = require('shelljs');
+
+import { Job } from './job';
+import { JobSearch } from './jobsearch';
+import { TaskOptions } from './jenkinsqueuejobtask';
+import { JobState } from './states';
+
+import util = require('./util');
+
+export class JobQueue {
+ public TaskOptions: TaskOptions;
+
+ public RootJob: Job;
+ private allJobs: Job[] = [];
+ private searches: JobSearch[] = [];
+
+ constructor(taskOptions: TaskOptions) {
+ this.TaskOptions = taskOptions;
+ }
+
+ private intervalId: NodeJS.Timer;
+ private intervalMillis: number = 100;
+
+ public Start(): void {
+ tl.debug('jobQueue.start()');
+ this.intervalId = setInterval(() => {
+ try {
+ const nextSearches: JobSearch[] = this.findNextJobSearches();
+ for (const i in nextSearches) {
+ nextSearches[i].DoWork();
+ }
+
+ const running: Job[] = this.findRunningJobs();
+ for (const i in running) {
+ running[i].DoWork();
+ }
+ if (this.hasFailedJobs()) {
+ this.stop(false);
+ } else if (this.getActiveJobs().length === 0) {
+ this.stop(true);
+ } else {
+ this.FlushJobConsolesSafely();
+ }
+ } catch (err) {
+ tl.debug(err.message);
+ tl.setResult(tl.TaskResult.Failed, err.message);
+ this.stop(false);
+ }
+ }, this.intervalMillis);
+ }
+
+ private stop(complete: boolean): void {
+ tl.debug('jobQueue.stop()');
+ clearInterval(this.intervalId);
+ this.FlushJobConsolesSafely();
+ this.writeFinalMarkdown(complete);
+ }
+
+ private hasFailedJobs(): boolean {
+ for (const i in this.allJobs) {
+ const job: Job = this.allJobs[i];
+ if (job.State === JobState.Done) {
+ if (job.GetTaskResult() === tl.TaskResult.Failed) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ private findRunningJobs(): Job[] {
+ const running: Job[] = [];
+ for (const i in this.allJobs) {
+ const job: Job = this.allJobs[i];
+ if (job.State === JobState.Streaming || job.State === JobState.Downloading || job.State === JobState.Finishing) {
+ running.push(job);
+ }
+ }
+ return running;
+ }
+
+ private findNextJobSearches(): JobSearch[] {
+ const nextSearches: JobSearch[] = [];
+ for (const i in this.allJobs) {
+ const job = this.allJobs[i];
+ // the parent must be finished (or null for root) in order for a job to possibly be started
+ if (job.State === JobState.Locating && (job.Parent === null || job.Parent.State === JobState.Done)) {
+ // group these together so only search is done per job.identifier
+ if (!nextSearches[job.Identifier]) {
+ nextSearches[job.Identifier] = this.searches[job.Identifier];
+ }
+ nextSearches[job.Identifier].searchFor(job);
+ }
+ }
+ return nextSearches;
+ }
+
+ private getActiveJobs(): Job[] {
+ const active: Job[] = [];
+
+ for (const i in this.allJobs) {
+ const job = this.allJobs[i];
+ if (job.IsActive()) {
+ active.push(job);
+ }
+ }
+
+ return active;
+ }
+
+ public AddJob(job: Job) {
+ if (this.allJobs.length === 0) {
+ this.RootJob = job;
+ }
+ this.allJobs.push(job);
+ if (this.searches[job.Identifier] == null) {
+ this.searches[job.Identifier] = new JobSearch(this, job.TaskUrl, job.Identifier);
+ }
+ job.Search = this.searches[job.Identifier];
+ }
+
+ public FlushJobConsolesSafely(): void {
+ if (this.FindActiveConsoleJob() == null) { //nothing is currently writing to the console
+ const streamingJobs: Job[] = [];
+ let addedToConsole: boolean = false;
+ for (const i in this.allJobs) {
+ const job: Job = this.allJobs[i];
+ if (job.State === JobState.Done) {
+ if (!job.IsConsoleEnabled()) {
+ job.EnableConsole(); // flush the finished ones
+ addedToConsole = true;
+ }
+ } else if (job.State === JobState.Streaming || job.State === JobState.Finishing) {
+ streamingJobs.push(job); // these are the ones that could be running
+ }
+ }
+ // finally, if there is only one remaining, it is safe to enable its console
+ if (streamingJobs.length === 1) {
+ streamingJobs[0].EnableConsole();
+ } else if (addedToConsole) {
+ for (const i in streamingJobs) {
+ const job: Job = streamingJobs[i];
+ console.log('Jenkins job pending: ' + job.ExecutableUrl);
+ }
+ }
+ }
+ }
+
+ /**
+ * If there is a job currently writing to the console, find it.
+ */
+ public FindActiveConsoleJob(): Job {
+ const activeJobs: Job[] = this.getActiveJobs();
+ for (const i in activeJobs) {
+ const job: Job = activeJobs[i];
+ if (job.IsConsoleEnabled()) {
+ return job;
+ }
+ }
+ return null;
+ }
+
+ public FindJob(identifier: string, executableNumber: number): Job {
+ for (const i in this.allJobs) {
+ const job: Job = this.allJobs[i];
+ if (job.Identifier === identifier && job.ExecutableNumber === executableNumber) {
+ return job;
+ }
+ }
+ return null;
+ }
+
+ private writeFinalMarkdown(complete: boolean): void {
+ const colorize: Function = (s) => {
+ // 'Success' is green, everything else is red
+ let color: string = 'red';
+ if (s === tl.loc('succeeded')) {
+ color = 'green';
+ }
+
+ return `${s} `;
+ };
+
+ function walkHierarchy(job: Job, indent: string, padding: number): string {
+ let jobContents: string = indent;
+
+ // if this job was joined to another follow that one instead
+ job = findWorkingJob(job);
+
+ if (job.ExecutableNumber === -1) {
+ jobContents += indent + job.Name + ' ' + colorize(job.GetResultString()) + ' ';
+ } else {
+ const url = job.ExecutableUrl && job.ExecutableUrl.replace('"', '%22');
+ jobContents += indent + '[' + job.Name + ' #' + job.ExecutableNumber + '](' + url + ') ' + colorize(job.GetResultString()) + ' ';
+ }
+
+ let childContents: string = '';
+ for (const i in job.Children) {
+ const child: Job = job.Children[i];
+ childContents += walkHierarchy(child, indent + tab, padding + paddingTab);
+ }
+ return jobContents + childContents + indent;
+ }
+
+ function findWorkingJob(job: Job): Job {
+ if (job.State !== JobState.Joined) {
+ return job;
+ } else {
+ return findWorkingJob(job.Joined);
+ }
+ }
+
+ function createPipelineReport(job: Job, taskOptions: TaskOptions, report): string {
+ const authority: string = util.getUrlAuthority(job.ExecutableUrl);
+
+ const getStageUrl: Function = (authority, stage) => {
+ let result: string = '';
+ if (stage && stage['_links']
+ && stage['_links']['self']
+ && stage['_links']['self']['href']) {
+ result = stage['_links']['self']['href'];
+ //remove the api link
+ result = result.replace('/wfapi/describe', '');
+ }
+
+ return `${authority}${result}`;
+ };
+
+ const convertStatus: Function = (s) => {
+ let status: string = s.toLowerCase();
+ if (status === 'success') {
+ status = tl.loc('succeeded');
+ }
+ return status;
+ };
+
+ // Top level pipeline job status
+ let jobContent: string = '';
+ let jobName: string = taskOptions.jobName;
+ if (taskOptions.isMultibranchPipelineJob) {
+ jobName = `${jobName}/${taskOptions.multibranchPipelineBranch}`;
+ }
+ jobContent += '[' + jobName + ' #' + job.ExecutableNumber + '](' + job.ExecutableUrl + ') ' + colorize(job.GetResultString());
+ if (job.GetResultString() !== tl.loc('succeeded')) {
+ jobContent += ` ([${tl.loc('console')}](${job.ExecutableUrl}/console))`;
+ }
+ jobContent += ' ';
+
+ // For each stage, write its status
+ let stageContents: string = '';
+ for (let stage of report['stages']) {
+ const stageUrl: string = getStageUrl(authority, stage);
+ stageContents += '[' + stage['name'] + '](' + stageUrl + ') ' + colorize(convertStatus(stage.status)) + ' ';
+ }
+
+ if (stageContents) {
+ jobContent += '\n';
+ jobContent += stageContents;
+ jobContent += ' ';
+ }
+
+ return jobContent;
+ }
+
+ function generatePipelineReport(job: Job, taskOptions: TaskOptions, callback: (pipelineReport: string) => void): void {
+ util.getPipelineReport(job, taskOptions)
+ .then((body) => {
+ if (body) {
+ const parsedBody: any = JSON.parse(body);
+ callback(createPipelineReport(job, taskOptions, parsedBody));
+ } else {
+ callback(tl.loc('FailedToGenerateSummary'));
+ }
+ });
+ }
+
+ function generateMarkdownContent(job: Job, taskOptions: TaskOptions, callback: (markdownContent: string) => void): void {
+ util.isPipelineJob(job, taskOptions)
+ .then((isPipeline) => {
+ if (isPipeline) {
+ generatePipelineReport(job, taskOptions, callback);
+ } else {
+ callback(walkHierarchy(job, '', 0));
+ }
+ });
+ }
+
+ tl.debug('writing summary markdown');
+ const thisQueue: JobQueue = this;
+ const tempDir: string = shell.tempdir();
+ const linkMarkdownFile: string = path.join(tempDir, 'JenkinsJob_' + this.RootJob.Name + '_' + this.RootJob.ExecutableNumber + '.md');
+ tl.debug('markdown location: ' + linkMarkdownFile);
+ const tab: string = ' ';
+ const paddingTab: number = 4;
+ generateMarkdownContent(this.RootJob, thisQueue.TaskOptions, (markdownContents) => {
+ fs.writeFile(linkMarkdownFile, markdownContents, function callback(err) {
+ tl.debug('writeFinalMarkdown().writeFile().callback()');
+
+ if (err) {
+ //don't fail the build -- there just won't be a link
+ console.log('Error creating link to Jenkins job: ' + err);
+ } else {
+ console.log('##vso[task.addattachment type=Distributedtask.Core.Summary;name=Jenkins Results;]' + linkMarkdownFile);
+ }
+
+ let message: string = null;
+ if (complete) {
+ if (thisQueue.TaskOptions.capturePipeline) {
+ message = tl.loc('JenkinsPipelineComplete');
+ } else if (thisQueue.TaskOptions.captureConsole) {
+ message = tl.loc('JenkinsJobComplete');
+ } else {
+ message = tl.loc('JenkinsJobQueued');
+ }
+ if (thisQueue.TaskOptions.shouldFail) {
+ tl.setResult(tl.TaskResult.Failed, thisQueue.TaskOptions.failureMsg);
+ } else {
+ tl.setResult(tl.TaskResult.Succeeded, message);
+ }
+ } else {
+ if (thisQueue.TaskOptions.capturePipeline) {
+ message = tl.loc('JenkinsPipelineFailed');
+ } else if (thisQueue.TaskOptions.captureConsole) {
+ message = tl.loc('JenkinsJobFailed');
+ } else {
+ message = tl.loc('JenkinsJobFailedtoQueue');
+ }
+ tl.setResult(tl.TaskResult.Failed, message);
+ }
+ });
+ });
+ }
+}
diff --git a/_generated/JenkinsQueueJobV2/jobsearch.ts b/_generated/JenkinsQueueJobV2/jobsearch.ts
new file mode 100644
index 000000000000..d66e83e97553
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/jobsearch.ts
@@ -0,0 +1,314 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+import tl = require('azure-pipelines-task-lib/task');
+import Q = require('q');
+import request = require('request');
+
+import { Job } from './job';
+import { JobQueue } from './jobqueue';
+import { JobState } from './states';
+
+import util = require('./util');
+
+export class JobSearch {
+ private taskUrl: string; // URL for the job definition
+ private identifier: string; // identifier of the job this search is for
+ private queue: JobQueue;
+ private searchingFor: Job[] = [];
+
+ constructor(queue: JobQueue, taskUrl: string, identifier: string) {
+ this.queue = queue;
+ this.taskUrl = taskUrl;
+ this.identifier = identifier;
+
+ this.Initialize().fail((err) => {
+ throw err;
+ });
+ }
+
+ private foundCauses : any[] = []; // all found causes indexed by executableNumber
+
+ public Initialized: boolean = false;
+ public ParsedTaskBody: ParsedTaskBody; // the parsed task body of the job definition
+ private initialSearchBuildNumber: number = -1; // the intial, most likely build number for child jobs
+ private nextSearchBuildNumber: number = -1; // the next build number to check
+ private searchDirection: number = -1; // the direction to search, start by searching backwards
+
+ private working: boolean = false;
+ private workDelay: number = 0;
+
+ public Initialize(): Q.Promise {
+ const defer: Q.Deferred = Q.defer();
+ const thisSearch: JobSearch = this;
+ if (!thisSearch.Initialized) { //only initialize once
+ const apiTaskUrl: string = util.addUrlSegment(thisSearch.taskUrl, '/api/json?tree=downstreamProjects[name,url,color],lastBuild[number]');
+ tl.debug('getting job task URL:' + apiTaskUrl);
+ request.get({ url: apiTaskUrl, strictSSL: thisSearch.queue.TaskOptions.strictSSL }, function requestCallBack(err, httpResponse, body) {
+ if (!thisSearch.Initialized) { // only initialize once
+ if (err) {
+ if (err.code == 'ECONNRESET') {
+ tl.debug(err);
+ // resolve but do not initialize -- a job will trigger this again
+ defer.resolve(null);
+ } else {
+ defer.reject(err);
+ }
+ } else if (httpResponse.statusCode !== 200) {
+ defer.reject(util.getFullErrorMessage(httpResponse, 'Unable to retrieve job: ' + thisSearch.identifier));
+ } else {
+ const parsedBody: any = JSON.parse(body);
+ tl.debug(`parsedBody for: ${apiTaskUrl} : ${JSON.stringify(parsedBody)}`);
+ thisSearch.Initialized = true;
+ thisSearch.ParsedTaskBody = parsedBody;
+ // if this is the first time this job is triggered, there will be no lastBuild information, and we assume the
+ // build number is 1 in this case
+ thisSearch.initialSearchBuildNumber = (thisSearch.ParsedTaskBody.lastBuild) ? thisSearch.ParsedTaskBody.lastBuild.number : 1;
+ thisSearch.nextSearchBuildNumber = thisSearch.initialSearchBuildNumber;
+ thisSearch.searchDirection = -1; // start searching backwards
+ defer.resolve(null);
+ }
+ } else {
+ defer.resolve(null);
+ }
+ }).auth(thisSearch.queue.TaskOptions.username, thisSearch.queue.TaskOptions.password, true);
+ } else { // already initialized
+ defer.resolve(null);
+ }
+ return defer.promise;
+ }
+
+ public DoWork(): void {
+ if (this.working) { // return if already working
+ return;
+ } else {
+ this.working = true;
+ setTimeout(() => {
+ this.locateExecution();
+ }, this.workDelay);
+ }
+ }
+
+ private stopWork(delay: number): void {
+ this.workDelay = delay;
+ this.working = false;
+ this.searchingFor = [];
+ }
+
+ public searchFor(job: Job): void {
+ if (this.working) {
+ return;
+ } else {
+ this.searchingFor.push(job);
+ }
+ }
+
+ public DetermineMainJob(executableNumber: number, callback): void {
+ const thisSearch: JobSearch = this;
+ if (!thisSearch.foundCauses[executableNumber]) {
+ util.fail('No known exeuction number: ' + executableNumber + ' for job: ' + thisSearch.identifier);
+ } else {
+ const causes : any = thisSearch.foundCauses[executableNumber];
+ const causesThatRan: Job[] = []; // these are all the causes for this executableNumber that are running/ran
+ const causesThatMayRun: Job[] = []; // these are the causes for this executableNumber that could run in the future
+ const causesThatWontRun: Job[] = []; // these are the causes for this executableNumber that will never run
+ for (const i in causes) {
+ const job: Job = thisSearch.queue.FindJob(causes[i].upstreamUrl, causes[i].upstreamBuild);
+ if (job) { // we know about it
+ if (job.State === JobState.Streaming ||
+ job.State === JobState.Finishing ||
+ job.State === JobState.Downloading ||
+ job.State === JobState.Queued ||
+ job.State === JobState.Done) {
+ causesThatRan.push(job);
+ } else if (job.State === JobState.New || job.State === JobState.Locating) {
+ causesThatMayRun.push(job);
+ } else if (job.State === JobState.Joined || job.State === JobState.Cut) {
+ causesThatWontRun.push(job);
+ } else {
+ util.fail('Illegal state: ' + job);
+ }
+ }
+ }
+
+ let masterJob: Job = null; // there can be only one
+ let potentialMasterJobs: Job[] = []; // the list of all potential jobs that could be master
+ for (const i in causesThatRan) {
+ const causeThatRan: Job = causesThatRan[i];
+ const child: Job = findChild(causeThatRan);
+ if (child != null) {
+ if (child.State === JobState.Streaming || child.State === JobState.Finishing || child.State === JobState.Done) {
+ if (masterJob == null) {
+ masterJob = child;
+ } else {
+ util.fail('Can not have more than one master: ' + child);
+ }
+ } else {
+ potentialMasterJobs.push(child);
+ }
+ }
+ }
+
+ if (masterJob == null && potentialMasterJobs.length > 0) {
+ masterJob = potentialMasterJobs[0]; // simply assign the first one to master
+ potentialMasterJobs = potentialMasterJobs.slice(1); // and remove it from here
+ }
+
+ let secondaryJobs: Job[] = [];
+ if (masterJob != null) { // secondaryJobs are only possible once a master is assigned
+ secondaryJobs = potentialMasterJobs;
+ for (const i in causesThatWontRun) {
+ const causeThatWontRun: Job = causesThatWontRun[i];
+ const child: Job = findChild(causeThatWontRun);
+ if (child != null) {
+ secondaryJobs.push(child);
+ }
+ }
+ }
+
+ callback(masterJob, secondaryJobs);
+
+ function findChild(parent: Job): Job {
+ for (const i in parent.Children) {
+ const child: Job = parent.Children[i];
+ if (thisSearch.identifier === child.Identifier) {
+ return child;
+ }
+ }
+ return null;
+ }
+ }
+ }
+
+ public ResolveIfKnown(job: Job): boolean {
+ const thisSearch: JobSearch = this;
+ if (job.State !== JobState.New && job.State !== JobState.Locating) {
+ return true; // some other callback found it
+ } else if (job.Parent == null) { // root -- move straight to streaming
+ job.SetStreaming(job.ExecutableNumber);
+ return true;
+ } else if (job.Parent.State === JobState.Joined || job.Parent.State === JobState.Cut) {
+ job.Cut(); // the parent was joined or cut, so cut the child
+ return true;
+ } else {
+ for (const executableNumber in thisSearch.foundCauses) {
+ let resolved: boolean = false;
+ thisSearch.DetermineMainJob(parseInt(executableNumber), function (mainJob: Job, secondaryJobs: Job[]) {
+ if (job == mainJob) { // job is the main job -- so make sure it's running
+ job.SetStreaming(parseInt(executableNumber));
+ resolved = true;
+ return;
+ } else {
+ for (const i in secondaryJobs) {
+ if (job == secondaryJobs[i]) { // job is a secondary job, so join it to the main one
+ job.SetJoined(mainJob);
+ resolved = true;
+ return;
+ }
+ }
+ }
+ });
+ if (resolved) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Search for a pipelined job starting with a best guess for the build number, and a direction to search.
+ * First the search is done backwards and terminates when either finding the specified job, or the job's
+ * timestamp is earlier than the timestamp of the parent job that queued it. Then the restarts from the
+ * intial start point and searches forward until the job is found, or a 404 is reached and no more jobs
+ * are queued. At any point, the search also ends if the job is joined to another job.
+ */
+ private locateExecution() {
+ const thisSearch: JobSearch = this;
+
+ tl.debug('locateExecution()');
+ // first see if we already know about everything we are searching for
+ let foundAll: boolean = true;
+ for (const i in thisSearch.searchingFor) {
+ const job: Job = thisSearch.searchingFor[i];
+ const found: boolean = thisSearch.ResolveIfKnown(job);
+ foundAll = foundAll && found;
+ }
+
+ if (foundAll) {
+ thisSearch.stopWork(0); // found everything we were looking for
+ return;
+ } else {
+ const url: string = util.addUrlSegment(thisSearch.taskUrl, thisSearch.nextSearchBuildNumber + '/api/json?tree=actions[causes[shortDescription,upstreamBuild,upstreamProject,upstreamUrl]],timestamp');
+ tl.debug('pipeline, locating child execution URL:' + url);
+ request.get({ url: url, strictSSL: thisSearch.queue.TaskOptions.strictSSL }, function requestCallback(err, httpResponse, body) {
+ tl.debug('locateExecution().requestCallback()');
+ if (err) {
+ util.handleConnectionResetError(err); // something went bad
+ thisSearch.stopWork(thisSearch.queue.TaskOptions.pollIntervalMillis);
+ return;
+ } else if (httpResponse.statusCode === 404) {
+ // try again in the future
+ thisSearch.stopWork(thisSearch.queue.TaskOptions.pollIntervalMillis);
+ } else if (httpResponse.statusCode !== 200) {
+ util.failReturnCode(httpResponse, 'Job pipeline tracking failed to read downstream project');
+ } else {
+ const parsedBody: any = JSON.parse(body);
+ tl.debug(`parsedBody for: ${url} : ${JSON.stringify(parsedBody)}`);
+
+ /**
+ * This is the list of all reasons for this job execution to be running.
+ * Jenkins may 'join' several pipelined jobs so all will be listed here.
+ * e.g. suppose A -> C and B -> C. If both A & B scheduled C around the same time before C actually started,
+ * Jenkins will join these requests and only run C once.
+ * So, for all jobs being tracked (within this code), one is consisdered the main job (which will be followed), and
+ * all others are considered joined and will not be tracked further.
+ */
+ const findCauses = function(actions) {
+ for (const i in actions) {
+ if (actions[i].causes) {
+ return actions[i].causes;
+ }
+ }
+
+ return null;
+ };
+
+ const causes: any = findCauses(parsedBody.actions);
+ thisSearch.foundCauses[thisSearch.nextSearchBuildNumber] = causes;
+ thisSearch.DetermineMainJob(thisSearch.nextSearchBuildNumber, function (mainJob: Job, secondaryJobs: Job[]) {
+ if (mainJob != null) {
+ //found the mainJob, so make sure it's running!
+ mainJob.SetStreaming(thisSearch.nextSearchBuildNumber);
+ }
+ });
+
+ if (thisSearch.searchDirection < 0) { // currently searching backwards
+ if (thisSearch.nextSearchBuildNumber <= 1 || parsedBody.timestamp < thisSearch.queue.RootJob.ParsedExecutionResult.timestamp) {
+ //either found the very first job, or one that was triggered before the root job was; need to change search directions
+ thisSearch.searchDirection = 1;
+ thisSearch.nextSearchBuildNumber = thisSearch.initialSearchBuildNumber + 1;
+ } else {
+ thisSearch.nextSearchBuildNumber--;
+ }
+ } else {
+ thisSearch.nextSearchBuildNumber++;
+ }
+ return thisSearch.stopWork(0); // immediately poll again because there might be more jobs
+ }
+ }).auth(thisSearch.queue.TaskOptions.username, thisSearch.queue.TaskOptions.password, true);
+ }
+ }
+}
+
+interface Project {
+ name: string;
+ url: string;
+ color: string;
+}
+interface ParsedTaskBody {
+ downstreamProjects?: Project[];
+ lastBuild?: {
+ number: number
+ };
+}
diff --git a/_generated/JenkinsQueueJobV2/make.json b/_generated/JenkinsQueueJobV2/make.json
new file mode 100644
index 000000000000..ae5c6f5e3111
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/make.json
@@ -0,0 +1,11 @@
+{
+ "externals": {
+ "archivePackages": [
+ {
+ "archiveName": "7zip.zip",
+ "url": "https://vstsagenttools.blob.core.windows.net/tools/7zip/1/7zip.zip",
+ "dest": "./"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/_generated/JenkinsQueueJobV2/package-lock.json b/_generated/JenkinsQueueJobV2/package-lock.json
new file mode 100644
index 000000000000..bb257786c420
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/package-lock.json
@@ -0,0 +1,808 @@
+{
+ "name": "vsts-tasks-jenkinsqueuejob",
+ "requires": true,
+ "lockfileVersion": 1,
+ "dependencies": {
+ "@types/concat-stream": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.1.tgz",
+ "integrity": "sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/form-data": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz",
+ "integrity": "sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/mocha": {
+ "version": "5.2.7",
+ "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
+ "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ=="
+ },
+ "@types/node": {
+ "version": "16.11.59",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.59.tgz",
+ "integrity": "sha512-6u+36Dj3aDzhfBVUf/mfmc92OEdzQ2kx2jcXGdigfl70E/neV21ZHE6UCz4MDzTRcVqGAM27fk+DLXvyDsn3Jw=="
+ },
+ "@types/q": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz",
+ "integrity": "sha512-eqz8c/0kwNi/OEHQfvIuJVLTst3in0e7uTKeuY+WL/zfKn0xVujOTp42bS/vUUokhK5P2BppLd9JXMOMHcgbjA=="
+ },
+ "@types/qs": {
+ "version": "6.9.8",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz",
+ "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg=="
+ },
+ "@types/shelljs": {
+ "version": "0.3.33",
+ "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.3.33.tgz",
+ "integrity": "sha1-32E73biCJe0JzlyDX2INyq8VXms=",
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
+ },
+ "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.11.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
+ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
+ },
+ "azure-pipelines-task-lib": {
+ "version": "5.0.0-preview.0",
+ "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-5.0.0-preview.0.tgz",
+ "integrity": "sha512-uQJEv+q3/7RD7kgphFd33uXijaPwA1ePYoNkAgZpUhbZUtc2u4JL4ujTT/JJfgXBNW/QQNAiDQ2OC7vOQG/0tg==",
+ "requires": {
+ "minimatch": "3.0.5",
+ "q": "^1.5.1",
+ "semver": "^5.1.0",
+ "shelljs": "^0.8.5",
+ "sync-request": "6.1.0",
+ "uuid": "^3.0.1"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
+ },
+ "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"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ=="
+ },
+ "call-bind": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
+ "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "get-intrinsic": "^1.0.2"
+ }
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
+ },
+ "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"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ }
+ },
+ "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="
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "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=",
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "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": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
+ },
+ "form-data": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
+ "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
+ },
+ "get-intrinsic": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
+ "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "requires": {
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3"
+ }
+ },
+ "get-port": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz",
+ "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg=="
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "dependencies": {
+ "minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ }
+ }
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
+ },
+ "har-validator": {
+ "version": "5.1.5",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
+ "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+ "requires": {
+ "ajv": "^6.12.3",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-proto": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
+ "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
+ },
+ "has-symbols": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "http-basic": {
+ "version": "8.1.3",
+ "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz",
+ "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==",
+ "requires": {
+ "caseless": "^0.12.0",
+ "concat-stream": "^1.6.2",
+ "http-response-object": "^3.0.1",
+ "parse-cache-control": "^1.0.1"
+ }
+ },
+ "http-response-object": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz",
+ "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==",
+ "requires": {
+ "@types/node": "^10.0.3"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.17.60",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz",
+ "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw=="
+ }
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
+ },
+ "interpret": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA=="
+ },
+ "is-core-module": {
+ "version": "2.13.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+ "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "requires": {
+ "has": "^1.0.3"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo="
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "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.4.0",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
+ "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+ },
+ "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.2",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz",
+ "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.4.0",
+ "verror": "1.10.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
+ },
+ "mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "requires": {
+ "mime-db": "1.52.0"
+ }
+ },
+ "minimatch": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz",
+ "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==",
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-inspect": {
+ "version": "1.12.3",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
+ "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "parse-cache-control": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz",
+ "integrity": "sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg=="
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg=="
+ },
+ "path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns="
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
+ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
+ },
+ "promise": {
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz",
+ "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==",
+ "requires": {
+ "asap": "~2.0.6"
+ }
+ },
+ "psl": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
+ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ=="
+ },
+ "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": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw=="
+ },
+ "qs": {
+ "version": "6.11.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
+ "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
+ "requires": {
+ "side-channel": "^1.0.4"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rechoir": {
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
+ "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==",
+ "requires": {
+ "resolve": "^1.1.6"
+ }
+ },
+ "request": {
+ "version": "2.88.2",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
+ "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+ "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.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.5.0",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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==",
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "mime-db": {
+ "version": "1.51.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
+ "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g=="
+ },
+ "mime-types": {
+ "version": "2.1.34",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
+ "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
+ "requires": {
+ "mime-db": "1.51.0"
+ }
+ },
+ "qs": {
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz",
+ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+ },
+ "safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ }
+ }
+ },
+ "resolve": {
+ "version": "1.22.6",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.6.tgz",
+ "integrity": "sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==",
+ "requires": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
+ "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM="
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
+ },
+ "shelljs": {
+ "version": "0.8.5",
+ "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz",
+ "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==",
+ "requires": {
+ "glob": "^7.0.0",
+ "interpret": "^1.0.0",
+ "rechoir": "^0.6.2"
+ }
+ },
+ "side-channel": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+ "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
+ "requires": {
+ "call-bind": "^1.0.0",
+ "get-intrinsic": "^1.0.2",
+ "object-inspect": "^1.9.0"
+ }
+ },
+ "sshpk": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
+ "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==",
+ "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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="
+ },
+ "sync-request": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz",
+ "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==",
+ "requires": {
+ "http-response-object": "^3.0.1",
+ "sync-rpc": "^1.2.1",
+ "then-request": "^6.0.0"
+ }
+ },
+ "sync-rpc": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz",
+ "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==",
+ "requires": {
+ "get-port": "^3.1.0"
+ }
+ },
+ "then-request": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz",
+ "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==",
+ "requires": {
+ "@types/concat-stream": "^1.6.0",
+ "@types/form-data": "0.0.33",
+ "@types/node": "^8.0.0",
+ "@types/qs": "^6.2.31",
+ "caseless": "~0.12.0",
+ "concat-stream": "^1.6.0",
+ "form-data": "^2.2.0",
+ "http-basic": "^8.1.1",
+ "http-response-object": "^3.0.1",
+ "promise": "^8.0.0",
+ "qs": "^6.4.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "8.10.66",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.66.tgz",
+ "integrity": "sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw=="
+ }
+ }
+ },
+ "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==",
+ "requires": {
+ "psl": "^1.1.28",
+ "punycode": "^2.1.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
+ },
+ "typescript": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.0.2.tgz",
+ "integrity": "sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ==",
+ "dev": true
+ },
+ "uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
+ }
+ }
+}
diff --git a/_generated/JenkinsQueueJobV2/package.json b/_generated/JenkinsQueueJobV2/package.json
new file mode 100644
index 000000000000..a58736093863
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "vsts-tasks-jenkinsqueuejob",
+ "description": "Azure Pipelines Jenkins Queue Job Task",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/Microsoft/azure-pipelines-tasks.git"
+ },
+ "author": "Microsoft Corporation",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Microsoft/azure-pipelines-tasks/issues"
+ },
+ "scripts": {
+ "build": "node ../../make.js build --task JenkinsQueueJobV2",
+ "test": "node ../../make.js test --task JenkinsQueueJobV2"
+ },
+ "homepage": "https://github.com/Microsoft/azure-pipelines-tasks#readme",
+ "dependencies": {
+ "@types/q": "^1.0.7",
+ "@types/node": "^16.11.39",
+ "@types/mocha": "^5.2.7",
+ "@types/shelljs": "^0.3.0",
+ "request": "^2.88.2",
+ "azure-pipelines-task-lib": "^5.0.0-preview.0"
+ },
+ "devDependencies": {
+ "typescript": "4.0.2"
+ }
+}
diff --git a/_generated/JenkinsQueueJobV2/states.ts b/_generated/JenkinsQueueJobV2/states.ts
new file mode 100644
index 000000000000..617dfb8b751a
--- /dev/null
+++ b/_generated/JenkinsQueueJobV2/states.ts
@@ -0,0 +1,103 @@
+/**
+ * @enum {number} JobState
+ * @readonly
+ * @description Enum for job states
+ */
+export enum JobState {
+ /** The job is yet to begin */
+ New,
+
+ /** The job is being located */
+ Locating,
+
+ /** The job is running and its console output is streaming */
+ Streaming,
+
+ /** The job has run and is "finishing" */
+ Finishing,
+
+ /** The job has run and is done */
+ Done,
+
+ /** The job is considered complete because it has been joined to the execution of another matching job execution */
+ Joined,
+
+ /** The job was queued and will not be tracked for completion (as specified by the "Capture..." task setting) */
+ Queued,
+
+ /** The job was cut from execution by the pipeline */
+ Cut,
+
+ /** The job has run and its results are being downloaded (occurs when the TFS Plugin for Jenkins is installed) */
+ Downloading,
+
+ /** The job has run and while "finishing" Jenkins provided unexpected answer via an HTTP request */
+ Killed,
+}
+
+/**
+ * @function checkStateTransitions
+ * @description Check validation of transition between states
+ * @param {JobState} currentState - current job state
+ * @param {JobState} newState - future job state
+ * @throws {Error} When there was no transition rule for the current state
+ *
+ * @example
+ * Jobs transition between states as follows:
+ * BEGINNING STATE: New
+ * New → Locating, Streaming, Joined, Cut
+ * Locating → Streaming, Joined, Cut
+ * Streaming → Finishing
+ * Finishing → Downloading, Queued, Done, Killed
+ * Downloading → Done
+ * TERMINAL STATES: Done, Queued, Joined, Cut, Killed
+ */
+export function checkStateTransitions (currentState: JobState, newState: JobState): boolean {
+ let isValidTransition: boolean = false;
+ let possibleStates: Array